WinIO 3.0 初始化失败若干原因

来源:互联网 发布:数据交换平台监控 编辑:程序博客网 时间:2024/05/01 10:20

本文虽然是原创标题,实为整合,望作者见谅。

WinIO是什么?网上资料不少,不作解释。可http://www.internals.com/下载的winio3.0。

下载后的Binaries文件夹中包含WinIo32.dll,WinIo64.dll,WinIo32.sys,WinIo64.sys。

如果发现winIO在初始化的时候失败,这时候可能有三种原因。

当你使用的是64位系统时,初始化时需要使用WinIO64.sys,这一个系统驱动文件是需要数字签名的。

Winio64.sys没有正式的数字签名,只有测试的。需要修改一些东西,具体如下:

cmd->bcdedit /set testsigning on

然后修改WinIo64.sys的测试签名

1.打开 WinIO64.sys的属性框,翻到“数字签名”选项卡,点击“详细信息”
2.在新出来的对话框中点击“查看证书”
3.在又新出来的对话框中点击“安装证书”
4.点击“下一步”,然后选择“将所有的证书放入下列存储”
5.点击浏览,选择“受信任的根证书发布机构”

6.点击“下一步”,然后点击“完成”

7.在弹出的“安全性警告”对话框中选择“是”,才能导入成功

然后重启。

再调试程序,就可以成功初始化了。

当之前曾经安装过winIO时,初始化后如果调用GetLastError会得到错误代码1073,服务已经开启。此时只需要先将服务关闭即可,由于此服务在查看计算机服务管理和任务管理器都无法发现,所以需要使用程序来完成。

代码如下:

hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
hService = OpenService(hSCManager, L"WINIO", SERVICE_STOP | DELETE);
ControlService(hService, SERVICE_CONTROL_STOP, NULL);
DeleteService(hService);
CloseServiceHandle(hSCManager);
这一段程序只需要运行一次即可。

.sys文件没有放在正确的位置,通过查看源代码可以发现,.sys文件应当位于.dll所在的目录下。当然这个也是可以自己修改的,其中涉及到的函数为GetDriverPath(),代码如下。

bool GetDriverPath()
{
PSTR pszSlash;

if (!GetModuleFileName(GetModuleHandle(NULL), szWinIoDriverPath, sizeof(szWinIoDriverPath)))
return false;

pszSlash = strrchr(szWinIoDriverPath, '\\');

if (pszSlash)
pszSlash[1] = 0;
else
return false;

strcat(szWinIoDriverPath, "winio.sys");

return true;
}

参考链接:http://hi.baidu.com/luckily513/item/e3df432c7e64ff9ab73263b0

                 http://www.cnblogs.com/wangqian0realmagic/archive/2012/03/26/2418671.html

原创粉丝点击