Windows 7 x64驱动程序ERROR_INVALID_IMAGE_HASH

时间:2017-10-06 07:16:49

标签: c certificate driver windows-7-x64 driver-signing

我最近一直在尝试使用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,我能够成功签署我的驱动程序。

不幸的是,我回去尝试加载它,但我仍然遇到了同样的错误。

解决此问题的最佳方法是什么?

由于

0 个答案:

没有答案