我正在尝试将几个不同的信息从 Windows 中的用户模式应用程序传递给内核模式驱动程序。我不会假装完全知道我在做什么,所以如果我有任何基本的误解,我将不胜感激。
用户模式应用程序(将 IOCTL 发送给驱动程序):
typedef struct {
unsigned int write;
ULONG reg_addr;
ULONG reg_val;
} reg_parameters;
...
reg_parameters regvals;
regvals.write = 0;
regvals.reg_addr = 0xDEADBEEF;
regvals.reg_val = 0XBBBBBBBB;
ULONG value;
...
DeviceIoControl(driver,(ULONG)IOCTL_OMAPCONF_REG, ®vals, sizeof(regvals),
&value, sizeof(ULONG), &size, NULL);
内核模式驱动程序(在 reg_addr 读取内存并将值存储在 reg_val 指定的位置):
NTSTATUS OmapConfDrvDispatch(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
PVOID ioBuffer;
....
ioBuffer = Irp->AssociatedIrp.SystemBuffer;
....
现在,问题是:如何从ioBuffer
驱动程序中访问各个结构成员?
例如,为什么不那么简单ioBuffer.reg_addr
?
想法?