我在win2k下create一个service ,然后打开服务,并启动,可以正常动行,
可是在winxp下却不行~~各位大帮忙~源码如下
SC_HANDLE scmHandle = NULL;
SC_HANDLE svcHandle = NULL;
scmHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
*svcHandle = CreateService(scmHandle,
ServiceName,
ServiceDesc,
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
DriverPath,
NULL, NULL, NULL, NULL, NULL);
srvHandle = OpenService(scmHandle,ServiceName,SERVICE_START);
if (srvHandle != NULL)
{
if (StartService(srvHandle, 0, NULL)==0)
{
// 这个地方有错, 错误代码为,系统无法打开文件
}
}
ServiceName ,ServiceDesc DriverPath , 都为unicode
以上代码DriverPath 放在c:\winnt\system32\drivers\(win2k)
c:\windows\system32\drivers\ (winxp)
在win2k下可以正常运行,可在winxp下却出错, 我郁闷了?
win2k 和 winxp有什么区别呢?
可是在winxp下却不行~~各位大帮忙~源码如下
SC_HANDLE scmHandle = NULL;
SC_HANDLE svcHandle = NULL;
scmHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
*svcHandle = CreateService(scmHandle,
ServiceName,
ServiceDesc,
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
DriverPath,
NULL, NULL, NULL, NULL, NULL);
srvHandle = OpenService(scmHandle,ServiceName,SERVICE_START);
if (srvHandle != NULL)
{
if (StartService(srvHandle, 0, NULL)==0)
{
// 这个地方有错, 错误代码为,系统无法打开文件
}
}
ServiceName ,ServiceDesc DriverPath , 都为unicode
以上代码DriverPath 放在c:\winnt\system32\drivers\(win2k)
c:\windows\system32\drivers\ (winxp)
在win2k下可以正常运行,可在winxp下却出错, 我郁闷了?
win2k 和 winxp有什么区别呢?
Includes STANDARD_RIGHTS_REQUIRED, in addition to all of the access types listed in this table.
你换成SC_MANAGER_CREATE_SERVICE试试.
if (schSCManager==0)
{
long nError = GetLastError();
FILE* pLog = fopen(pLogFile,"a");
fprintf(pLog, "OpenSCManager failed, error code = %d\n", nError);
fclose(pLog);
}
else
{
SC_HANDLE schService = OpenService( schSCManager, pName, SERVICE_ALL_ACCESS);
if (schService==0)
{
long nError = GetLastError();
FILE* pLog = fopen(pLogFile,"a");
fprintf(pLog, "OpenService failed, error code = %d\n", nError);
fclose(pLog);
}
else
{
SERVICE_STATUS status;
if(nIndex>=0&&nIndex<128)
{
if(ControlService(schService,(nIndex|0x80),&status))
{
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return TRUE;
}
long nError = GetLastError();
FILE* pLog = fopen(pLogFile,"a");
fprintf(pLog, "ControlService failed, error code = %d\n", nError);
fclose(pLog);
}
else
{
FILE* pLog = fopen(pLogFile,"a");
fprintf(pLog, "Invalid argument to BounceProcess: %d\n", nIndex);
fclose(pLog);
}
CloseServiceHandle(schService);
}
CloseServiceHandle(schSCManager);
}
我第一次创建服务,打开,启动,那么服务的初始状态应为
SERVICE_STOPPED,我在win2k下可以, 在winxp 下就不行,
getlasterror()返回4,系统无法打开文件,
是不是xp下创建时,就已经加载的driver,就不允许访问这个文件了。
controlservice
还是不行, 拒绝访问 ̄ ̄
不知为何, 大侠,救命呀 ̄
登陆的用户是管理员权限,