2012-08-02 49 views
0

我試圖從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, &regvals, 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那麼簡單?

想法?

回答

2

演員的Irp->AssociatedIrp.SystemBuffer作爲reg_parameters指針:

reg_parameters* regvals = (reg_parameters*)Irp->AssociatedIrp.SystemBuffer; 
if (regvals->reg_addr == 0xDEADBEEF) { 
    // mmmm - beef 
} 

這是假設你有你的驅動程序代碼中定義的reg_parameters

+0

非常好,謝謝! – wanovak 2012-08-02 19:04:45

相關問題