2015-02-25 6 views
0

Driver:DeviceIoControl, передавая Int водителю

PIO_STACK_LOCATION pIoStackLocation = IoGetCurrentIrpStackLocation(pIrp); 
PVOID pBuf = pIrp->AssociatedIrp.SystemBuffer; 

switch (pIoStackLocation->Parameters.DeviceIoControl.IoControlCode) 
{ 
case IOCTL_TEST: 

    DbgPrint("IOCTL IOCTL_TEST."); 
    DbgPrint("int received : %i", pBuf); 

    break; 
} 

пространства пользователя App:

int test = 123; 
int outputBuffer; 

DeviceIoControl(hDevice, IOCTL_SET_PROCESS, &test, sizeof(test), &outputBuffer, sizeof(outputBuffer), &dwBytesRead, NULL); 
std::cout << "Output reads as : " << outputBuffer << std::endl; 

начинает печать в пространстве пользователя приложений из правильного значения, полученные обратно через выходной буфер, но в debug view, выведенное значение кажется мусором (то есть: «int получено: 169642096»)

Что я делаю неправильно?

+0

Ваш код драйвера печати указатель, а не значение INT. Вы хотите '* pBuf'. –

ответ

0

Как сказал предыдущий пользователь, вы печатаете адрес переменной, а не контент.

я настоятельно рекомендую вам взглянуть на следующие учебники развития Driver:

http://www.opferman.com/Tutorials/