通过IOCTL将结构传递给内核模式驱动程序
问题描述:
我试图从Windows中的用户模式应用程序将几个不同的信息传递给内核模式驱动程序。我不会假装完全知道我在做什么,所以如果我有任何根本性的误解,澄清将不胜感激。通过IOCTL将结构传递给内核模式驱动程序
用户模式应用程序(发送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_val指定在位置reg_addr和存储值存储器):
NTSTATUS OmapConfDrvDispatch(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
PVOID ioBuffer;
....
ioBuffer = Irp->AssociatedIrp.SystemBuffer;
....
现在,问题:如何访问驱动程序中ioBuffer
的各个结构成员?
例如,为什么不像ioBuffer.reg_addr
那么简单?
想法?
答
演员的Irp->AssociatedIrp.SystemBuffer
作为reg_parameters
指针:
reg_parameters* regvals = (reg_parameters*)Irp->AssociatedIrp.SystemBuffer;
if (regvals->reg_addr == 0xDEADBEEF) {
// mmmm - beef
}
这是假设你有你的驱动程序代码中定义的reg_parameters
。
非常好,谢谢! – wanovak 2012-08-02 19:04:45