ssguo
驱动牛犊
驱动牛犊
  • 注册日期2012-04-24
  • 最后登录2012-04-26
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1716回复:2

C++ 载入驱动的问题,对会的来说简单,急,都来看看吧

楼主#
更多 发布于:2012-04-26 17:04
有一段VB调用驱动的代码,
它的主函数入口是:
Dim c_Drv As New cls_Driver
Sub Main()
  With c_Drv
  .szDrvFilePath = App.path & "\mydriver.sys"
  .szDrvLinkName = "NewPine"
  .szDrvSvcName = "NewPine"
  .szDrvDisplayName = "NewPine"
  .InstDrv
  .StartDrv
  .OpenDrv
  Dim path As String
  path = "\??\" & "C:\Program Files\MSBuild\ndt.exe"
  c_Drv.IoControl 2231680, VarPtr(path), 4, 0, 0
  End With
End Sub

=====

其中 cls_Driver 这是个类,加载驱动什么的。  
cls_Driver 里有段代码如下
'lpInBuf 和 lpOutBuf 都是指向缓冲区的指针
Public Function IoControl(ByVal dwIoControlCode As Long, ByVal lpInBuffer As Long, ByVal nInBufferSize As Long, ByVal lpOutBuffer As Long, ByVal nOutBufferSize As Long, Optional ByRef lpBytesReturned As Long = 0) As Long
Dim lDrvRetSize As Long
IoControl = DeviceIoControl(hDrvHandle, dwIoControlCode, ByVal lpInBuffer, nInBufferSize, ByVal lpOutBuffer, nOutBufferSize, lDrvRetSize, ByVal 0)
lpBytesReturned = lDrvRetSize
End Function




以下是我对照它用vs2008 c++写的代码

int _tmain(int argc, _TCHAR* argv[])
{



//获取路径
TCHAR tszPath[MAX_PATH];
GetModuleFileName(NULL,tszPath,MAX_PATH);
*(_tcsrchr(tszPath,_T('\\')) + 1) = _T('\0');
_tcscat_s(tszPath,MAX_PATH,_T("mydriver.sys"));

//载入驱动
if(LoadNTDriver(TEXT("DriverTest"),tszPath))
printf("Load Driver Sucess.\n");
else
  printf("Load Driver Faile\n");
//打开设备
HANDLE hDevice =  
CreateFile(TEXT("\\\\.\\NewPine"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );
if (hDevice == INVALID_HANDLE_VALUE)
{
printf("Can no open she bei:%d", GetLastError());
CloseHandle(hDevice);
if(UnloadNTDriver(TEXT("DriverTest")))
printf("Unload Driver Sucess.\n");
return 0x01i32;
}

DWORD dwRet;
DeviceIoControl(hDevice,2231680, "C:\Program Files\MSBuild\ndt.exe",4, 0, 0, &dwRet, 0);
CloseHandle(hDevice);
  system("pause");
//卸载驱动
UnloadNTDriver(TEXT("Ring0"));
return 0;
}

运行时驱动加载成功,但运行到 红色部分就蓝屏,哪里出错呢?
该怎么改写呢?
admin
管理员
管理员
  • 注册日期2005-06-18
  • 最后登录2022-01-27
  • 粉丝2
  • 关注0
  • 积分30分
  • 威望132点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2012-04-27 15:41
蓝掉是因为驱动有bug,比如判断有问题。当然,你发的数据可能也不对,但是通常不应该蓝掉。
这个需要具体调试了,最好联系驱动开发人员。
AioliaSky
驱动牛犊
驱动牛犊
  • 注册日期2012-06-14
  • 最后登录2012-10-25
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望141点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2012-06-14 01:53
DeviceIoControl参数不对,去查一下
游客

返回顶部