21,597
社区成员
发帖
与我相关
我的任务
分享
// 结构体定义如下
typedef struct tagDISK_ITEM_INFO{
DWORD dwDevIndex;
WCHAR wszFilePath[260];
}DISK_ITEM_INFO, *PDISK_ITEM_INFO;
DISK_ITEM_INFO DiskItemInfo;
DiskItemInfo.dwDevIndex = 1;
wcscpy(DiskItemInfo.wszFilePath, L"C:\\test.vfd");
// 传给驱动
DWORD dwBytesReturned;
DeviceIoControl(m_hDriver, IOCTRL_TEST, &DiskItemInfo, sizeof(DISK_ITEM_INFO), NULL, 0, &dwBytesReturned, NULL);
/* ---------------- 下面是驱动层 -------------- */
// 获取当前堆栈
PIO_STACK_LOCATION pLocalStack = IoGetCurrentIrpStackLocation(Irp);
// 获取输入缓冲区大小
ULONG dwInputBuffLen = pLocalStack->Parameters.DeviceIoControl.InputBufferLength;
// 获取输出缓冲区大小
ULONG dwOutputBuffLen = pLocalStack->Parameters.DeviceIoControl.OutputBufferLength;
// 获取控制码
ULONG dwCtrlCode = pLocalStack->Parameters.DeviceIoControl.IoControlCode;
DISK_ITEM_INFO* pDiskItemInfo = NULL;
switch ( dwCtrlCode )
{
case IOCTRL_TEST:
pDiskItemInfo = (DISK_ITEM_INFO*)Irp->AssociatedIrp.SystemBuffer; // 问题就在这里,pDiskItemInfo指向的内存地址值是0,dwInputBuffLen的值等于sizeof(DISK_ITEM_INFO)
break;
...
}