구리의 창고

driver와 application 데이터 주고받기 본문

Window Driver

driver와 application 데이터 주고받기

구리z 2010. 2. 12. 12:04
1. application이 driver 에게 버전 요청

winioctl.h 에 정의된 함수인 DeviceIoControl()를 사용한다.
사용 예시는 아래와 같다.

DWORD dwRet;
ULONG Version;
DeviceIoControl( hDevice, IOCTL_CMD_VERSION, &Version, sizeof(ULONG), &Version, sizeof(ULONG), &dwRet, NULL );


2. driver는 ioctl 이벤트가 일어나면 이를 감지하고 적절한 case 문으로 이벤트를 처리한다

그럼 드라이버에서는 irp stack에 뭐가 왔나 체크를한다.

PIO_STACK_LOCATION irpStack ;
ULONG outputBufferLength;

irpStack = IoGetCurrentIrpStackLocation(Irp) ; 
outputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength;


ULONG Version;
if (outputBufferLength > 0)
{
Version = pdx->Version;
DbgPrint("Version : %d\n", Version); //for debugging
irpStack->Parameters.DeviceIoControl.OutputBufferLength = sizeof(ULONG) ;
*((ULONG*)Irp->AssociatedIrp.SystemBuffer ) = Version;
Irp->IoStatus.Information = sizeof(ULONG) ;
}


3. 이렇게 SystemBuffer 에 구해온 Version 값을 넣어주면 1번에서 참조한 Version에 데이터가 넘어간다.




Comments