武漢--傷心的魚 13:26:37
誰懂驅(qū)動和應(yīng)用程序之間的通訊
武漢--傷心的魚 13:26:47
我寫的代碼運(yùn)行不了
武漢--傷心的魚 13:26:53
請教啊
廣州-奪寶 14:20:15
什么驅(qū)動?
武漢--傷心的魚 14:25:07
一般系統(tǒng)驅(qū)動
廣州-奪寶 14:26:54
什么類型的驅(qū)動?怎么和應(yīng)用通信?
武漢--傷心的魚 14:27:35
就是獲取讀取進(jìn)程驅(qū)動
廣州-奪寶 14:43:52
發(fā)源碼、測試用例到群共享
武漢--傷心的魚 14:46:40
恩
武漢--傷心的魚 14:47:07
void CDrivercomunicationDlg::OnButton3() //列進(jìn)程
{
char cszDriverName[MAX_PATH]="list.sys";
char cszDriverFullPath[MAX_PATH]="D:\\sys\\drivercomunication\\list.sys";
InstallDriver(cszDriverName,cszDriverFullPath);//安裝驅(qū)動
StartDriver(cszDriverName,cszDriverFullPath);//啟動驅(qū)動
HANDLE hDevice;
BOOL Status;
ULONG dwReturn;
char outBuf[4096];
hDevice =CreateFile("\\\\.\\list",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);//創(chuàng)建設(shè)備
if(hDevice==INVALID_HANDLE_VALUE)
{
printf("createfile wrong\n");
getchar();
}
//發(fā)送句柄給驅(qū)動
Status=DeviceIoControl(hDevice,IOCTL_PASSBUF,NULL,0,outBuf,sizeof(outBuf),&dwReturn,NULL);
if(!Status)
{
printf("Io wrong\n");
getchar();
}
printf("%s\n",outBuf);
Status = CloseHandle( hDevice );
getchar();
//創(chuàng)建事件
//發(fā)送事件句柄給驅(qū)動程序
StopDriver(cszDriverName,cszDriverFullPath);//停止驅(qū)動
DeleteDriver(cszDriverName,cszDriverFullPath);//刪除驅(qū)動
RemoveDriver(cszDriverName,cszDriverFullPath);//卸載驅(qū)動
}
武漢--傷心的魚 14:47:45
NTSTATUS DispatchIoctl(PDEVICE_OBJECT pDevObject, PIRP pIrp)//處理IRP函數(shù)
{
PIO_STACK_LOCATION irpStack;
NTSTATUS Status;
PVOID InPutBuffer;
ULONG ioControlCode;
ULONG OutPutLen;
Status=STATUS_SUCCESS;
irpStack=IoGetCurrentIrpStackLocation(pIrp);
ioControlCode=irpStack->Parameters.DeviceIoControl.IoControlCode;
switch(irpStack->MajorFunction)
{
case IRP_MJ_DEVICE_CONTROL:
OutPutLen=irpStack->Parameters.DeviceIoControl.OutputBufferLength;
switch(ioControlCode)
{
case IOCTL_PASSBUF:
RtlCopyMemory(pIrp->UserBuffer,xxx, OutPutLen);
break;
default:
break;
}
break;
default:
DbgPrint("no match control\n");
break;
}
pIrp->IoStatus.Status = Status;
pIrp->IoStatus.Information = 0;
IoCompleteRequest (pIrp, IO_NO_INCREMENT);
return Status;
}
武漢--傷心的魚 14:49:44
驅(qū)動沒問題
武漢--傷心的魚 14:50:01
DBGVIEW顯示是正確的
武漢--傷心的魚 14:50:43
就通信錯誤 ring3下程序獲取不到數(shù)據(jù)
廣州-奪寶 14:53:08
RtlCopyMemory(pIrp->UserBuffer,xxx, OutPutLen); ////拷到數(shù)據(jù)了嗎?
武漢--傷心的魚 14:53:17
沒
武漢--傷心的魚 14:53:21
就這出錯
武漢--傷心的魚 14:54:54
幫我看看程序什么原因
武漢--傷心的魚 14:55:58

武漢--傷心的魚 14:56:10
直接無法創(chuàng)建設(shè)備句柄
武漢--傷心的魚 14:56:25
hDevice =CreateFile("\\\\.\\list",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);//創(chuàng)建設(shè)備
武漢--傷心的魚 14:56:37
好像是這句問題
廣州-奪寶 14:56:59
CloseHandle
武漢--傷心的魚 14:57:34
Status = CloseHandle( hDevice );有啊
廣州-奪寶 14:57:47
驅(qū)動有問題
王道_北京 15:02:17
發(fā)代碼來看看
武漢--傷心的魚 15:02:35
群共享
武漢--傷心的魚 15:02:39
sys.rar
王道_北京 15:05:02
cszDriverName
王道_北京 15:05:29
memset(cszDriverName,'\0',MAX_PATH)
武漢--傷心的魚 15:06:16
status = IoCreateDevice(pDrvObject,
0,
&ustrDevName,
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&pDevObject);
dprintf("[list] Device Name %S",ustrDevName.Buffer);//獲取驅(qū)動設(shè)備名字
if(!NT_SUCCESS(status))
{
dprintf("[list] IoCreateDevice = 0x%x\n", status);
return status;
}
武漢--傷心的魚 15:06:22
應(yīng)該是這里問題
王道_北京 15:07:40
我沒原碼 不過以前碰到類似的情況是因?yàn)闆]初始話
武漢--傷心的魚 15:07:41
yes
王道_北京 15:08:12
好了?
武漢--傷心的魚 15:08:21
我在程序里面加載驅(qū)動 有用InstDrv.exe加載驅(qū)動
武漢--傷心的魚 15:08:35
其中一個沒卸載 就無法再創(chuàng)建了
王道_北京 15:08:57
武漢--傷心的魚 15:09:41
那個問題解決了