C++ 载入驱动的问题,对会的来说简单,急,都来看看吧
有一段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;
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;
}
运行时驱动加载成功,但运行到 红色部分就蓝屏,哪里出错呢?
该怎么改写呢?
页:
[1]