武汉--伤心的鱼 13:26:37
谁懂驱动和应用程序之间的通讯
武汉--伤心的鱼 13:26:47
我写的代码运行不了
武汉--伤心的鱼 13:26:53
请教啊
广州-夺宝 14:20:15
什么驱动?
武汉--伤心的鱼 14:25:07
一般系统驱动
广州-夺宝 14:26:54
什么类型的驱动?怎么和应用通信?
武汉--伤心的鱼 14:27:35
就是获取读取进程驱动
广州-夺宝 14:43:52
发源码、测试用例到群共享
武汉--伤心的鱼 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);//创建设备
if(hDevice==INVALID_HANDLE_VALUE)
{
printf("createfile wrong\n");
getchar();
}
//发送句柄给驱动
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();
//创建事件
//发送事件句柄给驱动程序
StopDriver(cszDriverName,cszDriverFullPath);//停止驱动
DeleteDriver(cszDriverName,cszDriverFullPath);//删除驱动
RemoveDriver(cszDriverName,cszDriverFullPath);//卸载驱动
}
武汉--伤心的鱼 14:47:45
NTSTATUS DispatchIoctl(PDEVICE_OBJECT pDevObject, PIRP pIrp)//处理IRP函数
{
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下程序获取不到数据
广州-夺宝 14:53:08
RtlCopyMemory(pIrp->UserBuffer,xxx, OutPutLen); ////拷到数据了吗?
武汉--伤心的鱼 14:53:17
没
武汉--伤心的鱼 14:53:21
就这出错
武汉--伤心的鱼 14:54:54
帮我看看程序什么原因
武汉--伤心的鱼 14:55:58
武汉--伤心的鱼 14:56:10
直接无法创建设备句柄
武汉--伤心的鱼 14:56:25
hDevice =CreateFile("\\\\.\\list",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);//创建设备
武汉--伤心的鱼 14:56:37
好像是这句问题
广州-夺宝 14:56:59
CloseHandle
武汉--伤心的鱼 14:57:34
Status = CloseHandle( hDevice );有啊
广州-夺宝 14:57:47
驱动有问题
王道_北京 15:02:17
发代码来看看
武汉--伤心的鱼 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
其中一个没卸载 就无法再创建了
王道_北京 15:08:57
武汉--伤心的鱼 15:09:41
那个问题解决了