武漢--傷心的魚 13:26:37
誰懂驅動和應用程序之間的通訊
武漢--傷心的魚 13:26:47
我寫的代碼運行不了
武漢--傷心的魚 13:26:53
請教啊
廣州-奪寶 14:20:15
什么驅動?
武漢--傷心的魚 14:25:07
一般系統(tǒng)驅動
廣州-奪寶 14:26:54
什么類型的驅動?怎么和應用通信?
武漢--傷心的魚 14:27:35
就是獲取讀取進程驅動
廣州-奪寶 14:43:52
發(fā)源碼、測試用例到群共享
武漢--傷心的魚 14:46:40
恩
武漢--傷心的魚 14:47:07
void CDrivercomunicationDlg::OnButton3() //列進程
{
char cszDriverName[MAX_PATH]="list.sys";
char cszDriverFullPath[MAX_PATH]="D:\\sys\\drivercomunication\\list.sys";
InstallDriver(cszDriverName,cszDriverFullPath);//安裝驅動
StartDriver(cszDriverName,cszDriverFullPath);//啟動驅動
HANDLE hDevice;
BOOL Status;
ULONG dwReturn;
char outBuf[4096];
hDevice =CreateFile("\\\\.\\list",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);//創(chuàng)建設備
if(hDevice==INVALID_HANDLE_VALUE)
{
printf("createfile wrong\n");
getchar();
}
//發(fā)送句柄給驅動
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ā)送事件句柄給驅動程序
StopDriver(cszDriverName,cszDriverFullPath);//停止驅動
DeleteDriver(cszDriverName,cszDriverFullPath);//刪除驅動
RemoveDriver(cszDriverName,cszDriverFullPath);//卸載驅動
}
武漢--傷心的魚 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
驅動沒問題
武漢--傷心的魚 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)建設備句柄
武漢--傷心的魚 14:56:25
hDevice =CreateFile("\\\\.\\list",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);//創(chuàng)建設備
武漢--傷心的魚 14:56:37
好像是這句問題
廣州-奪寶 14:56:59
CloseHandle
武漢--傷心的魚 14:57:34
Status = CloseHandle( hDevice );有啊
廣州-奪寶 14:57:47
驅動有問題
王道_北京 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);//獲取驅動設備名字
if(!NT_SUCCESS(status))
{
dprintf("[list] IoCreateDevice = 0x%x\n", status);
return status;
}
武漢--傷心的魚 15:06:22
應該是這里問題
王道_北京 15:07:40
我沒原碼 不過以前碰到類似的情況是因為沒初始話
武漢--傷心的魚 15:07:41
yes
王道_北京 15:08:12
好了?
武漢--傷心的魚 15:08:21
我在程序里面加載驅動 有用InstDrv.exe加載驅動
武漢--傷心的魚 15:08:35
其中一個沒卸載 就無法再創(chuàng)建了
王道_北京 15:08:57
武漢--傷心的魚 15:09:41
那個問題解決了