StartService 加载驱动提示 “拒绝访问” 该如何解决

sky_123 2009-08-30 09:41:02
刚开始写驱动
就写了哥简单的 什么也不做就是输出点信息
NTSTATUS DriverEntry(
IN PDRIVER_OBJECT pDriverObject,
IN PUNICODE_STRING RegistryPath
)
{
NTSTATUS status = STATUS_SUCCESS;
DbgPrint("DriverDemo: DriverEntry...\n");
// 初始化各个派遣例

return STATUS_SUCCESS;
}

让后动态加载这个驱动

CString szServiceName = _T("MyDriver");
CString szFilePath = _T("C:\\WINDOWS\\system32\\drivers\\Drv2.sys");


BOOL bRet = FALSE;
SC_HANDLE hService = ::CreateService(
hSCM, szServiceName, szServiceName,
SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE,
szFilePath, NULL, NULL, _T(""), NULL,NULL);
if (! hService)
{
hService = ::OpenService(hSCM, szServiceName, SERVICE_STOP | DELETE);
}

bRet = StartService(hService, 0, NULL) ;
long lRet = GetLastError();


然后StartService返回失败 GetLastError返回值是5 拒绝访问。
请问该如何解决 谢谢??
...全文
388 点赞 收藏 17
写回复
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky_123 2009-08-30
用DriverMonitor可以启动
回复
sky_123 2009-08-30
这个软件是不是要下?
回复
MoXiaoRab 2009-08-30
你看看用DriverMonitor能不能加载
回复
MoXiaoRab 2009-08-30
我没QQ
回复
sky_123 2009-08-30
能在QQ上聊吗
回复
sky_123 2009-08-30
BOOL EnablePrivilege(LPTSTR lpName, BOOL fEnable)
{
HANDLE hObject;
LUID Luid;
TOKEN_PRIVILEGES NewStatus;

if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hObject))
return FALSE;

if (LookupPrivilegeValue(NULL, lpName, &Luid))
{
NewStatus.Privileges[0].Luid = Luid;
NewStatus.PrivilegeCount = 1;
NewStatus.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;

AdjustTokenPrivileges(hObject, FALSE, &NewStatus, 0, 0, 0);

CloseHandle(hObject);
return TRUE;
}

return FALSE;
}

我掉 EnablePrivilege(SE_LOAD_DRIVER_NAME, TRUE);后
还是一样有问题
回复
MoXiaoRab 2009-08-30
回复
sky_123 2009-08-30
能问下要怎样提权吗
回复
sky_123 2009-08-30
能问下要怎样提权吗
回复
MoXiaoRab 2009-08-30
大概是权限问题,你试试我说的提权
回复
sky_123 2009-08-30
还有就是尝试先提权再加载,提权限SE_LOAD_DRIVER_NAME


要怎样做
刚开始接触驱动开发
多包含
回复
sky_123 2009-08-30
OpenSCManager和CreateService返回值都是正确的
回复
MoXiaoRab 2009-08-30
还有,你前面的OpenSCManager和CreateService都用了吗?
回复
MoXiaoRab 2009-08-30
你试试看用DriverMonitor能不能加载你的驱动?

还有就是尝试先提权再加载,提权限SE_LOAD_DRIVER_NAME
回复
sky_123 2009-08-30
什么都没改
现在开机试了下就可以了
哈哈
但不知道为什么
回复
MoXiaoRab 2009-08-30
那得检查下你的代码,肯定哪里写得有问题了
回复
fangchao918628 2009-08-30
hService = ::OpenService(hSCM, szServiceName, SERVICE_STOP | DELETE); 

改成
::OpenService(hSCM, szServiceName, SERVICE_ALL_ACCESS); 
回复
发动态
发帖子
硬件/系统
创建于2007-09-28

2590

社区成员

VC/MFC 硬件/系统
申请成为版主
社区公告
暂无公告