hzqst
估计你路径填的不对吧,xp和vista以上系统对CreateService的形如C:\XXXX\YYY.sys这样的ImagePath处理有点差别,vista以上会自动帮你在开头加上\\??\\,xp ...
我在绕过UAC的提权启动中,带参数启动的命令是这么写的,你看看:AddUninstallItem(L"C:\\Windows\\System32\\cmd.exe /c C:\\Users\\xu\\Desktop\\SafeCheck.exe");
关键是,同样的路径,右键以管理员身份启动驱动加载(SafeCheck.exe),驱动可以加载成功,但是,用上边的这种带参数启动,就不可以:附驱动加载命令:
//得到完整的驱动路径
GetFullPathNameA(lpszDriverPath, MAX_PATH, szDriverImagePath, NULL);
SC_HANDLE hServiceMgr = NULL;// SCM管理器的句柄
SC_HANDLE hService = NULL;// NT驱动程序的服务句柄
//打开服务控制管理器
hServiceMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hServiceMgr == NULL)
{
// OpenSCManager失败
CloseServiceHandle(hServiceMgr);
return FALSE;
}
// OpenSCManager成功
//创建驱动所对应的服务
hService = CreateServiceA(hServiceMgr,
lpszDriverName, // 驱动程序的在注册表中的名字
lpszDriverName, // 注册表驱动程序的DisplayName 值
SERVICE_ALL_ACCESS, // 加载驱动程序的访问权限
SERVICE_FILE_SYSTEM_DRIVER, // 表示加载的服务是文件系统驱动程序
SERVICE_DEMAND_START, // 注册表驱动程序的Start 值
SERVICE_ERROR_IGNORE, // 注册表驱动程序的ErrorControl 值
szDriverImagePath, // 注册表驱动程序的ImagePath 值
"FSFilter Activity Monitor",// 注册表驱动程序的Group 值
NULL,
"FltMgr", // 注册表驱动程序的DependOnService 值
NULL,
NULL);