我最近一直在尝试使用Visual Studio 2015创建第一个使用WDK的驱动程序,到目前为止我能够生成.sys文件,以及.cert和默认生成的其他文件。
当我尝试动态加载驱动程序时出现问题,函数失败,代码为577,ERROR_INVALID_IMAGE_HASH。
以下是我用来加载驱动程序的代码:
#include <windows.h>
#include <stdio.h>
int _cdecl main(void)
{
HANDLE hSCManager;
HANDLE hService;
SERVICE_STATUS ss;
DWORD error;
PHANDLE hToken;
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
error = GetLastError();
printf("Load Driver\n");
if (hSCManager)
{
printf("Create Service\n");
hService = CreateService(hSCManager
, "test"
, "test Driver"
, SERVICE_START | DELETE | SERVICE_STOP
, SERVICE_KERNEL_DRIVER
, SERVICE_DEMAND_START
, SERVICE_ERROR_IGNORE
, "C:\\driver_test.sys"
, NULL, NULL, NULL, NULL, NULL);
error = GetLastError();
if(error == ERROR_SERVICE_EXISTS)
{
error = 0;
}
if(!hService)
{
hService = OpenService(hSCManager, "test", SERVICE_START | DELETE
| SERVICE_STOP);
}
error = GetLastError();
if (hService)
{
printf("Start Service\n");
StartService(hService, 0, NULL);
error = GetLastError();
if (error!= NO_ERROR)
{
printf("Error: %d\nPress Enter to exit", error);
getchar();
}
else
{
printf("SUCCESS\nPress Enter to close service\n");
getchar();
}
ControlService(hService, SERVICE_CONTROL_STOP, &ss);
CloseServiceHandle(hService);
DeleteService(hService);
}
CloseServiceHandle(hSCManager);
}
return 0;
}
在调用StartService函数后立即调用GetLastError函数时出现错误。
到目前为止,我所理解的是我尝试测试的驱动程序没有有效的证书,或者至少Windows并不知道它的存在。
因此我尝试在vs2015的developper命令提示符中使用signtool,我能够成功签署我的驱动程序。
不幸的是,我回去尝试加载它,但我仍然遇到了同样的错误。
解决此问题的最佳方法是什么?
由于