2015-01-09 2 views
1

앱에 데이터 드라이버를 보낼 수 있습니다. 앱데이터는 DeviceIoControl을 사용하여 앱에서 드라이버로 전송합니다.

:

DeviceIoControl(dHandle, IOCTL_TEST, (PVOID)InputBuffer, sizeof(InputBuffer), (PVOID)OutputBuffer, sizeof(OutputBuffer), &dwRet, 0); 
printf("num : %s\n", OutputBuffer); 

드라이버 인은 :

char pData[1024]; 
pData="eeee"; 
case IOCTL_TEST: 
     pInputBuffer = Irp->AssociatedIrp.SystemBuffer; 
     pOutputBuffer = Irp->AssociatedIrp.SystemBuffer; 
     inputBufferLength = pStack->Parameters.DeviceIoControl.OutputBufferLength; 
     RtlCopyMemory(pOutputBuffer, pData, strlen(pData)); 
     break; 
Irp.IoStatus.Information=1024; 

결과 애플리케이션 콘솔 "eeee"를 인쇄한다.

하지만 드라이버에 앱 데이터를 보내는 방법을 모르겠습니다. DeviceIoControl의 3, 4 매개 변수는 입력 버퍼 및 길이입니다.
char InputBuffer[1024] = "InputBuffer's data";을 앱에 추가하면 어떻게이 데이터를받을 수 있습니까? 앱에서 허용하는 데이터에 DbgPrint()을 사용하고 싶습니다.


답을 선택하고 싶습니다. plz 대답하지 주석.

+0

제어 코드의 'TransferType'매개 변수에 따라 다릅니다. 'METHOD_BUFFERED'의 경우 장치 드라이버는'pInputBuffer'에서 데이터를 읽습니다. 그것은 모두 http://msdn.microsoft.com/en-us/library/windows/hardware/ff540663%28v=vs.85%29.aspx –

+0

흠 ...에 설명되어 있습니다 이것은 내 생각입니다 ... 나는 Irp -> AssociatedIrp.Systembuffer 2 tiems, 그래서 pInputBuffer와 pOutputBuffer는 같은 주소를 가리 킵니다. 그리고 RtlCopyMemory()는 pData로 pOutputBuffer를 작성합니다. 그런 다음 pInputBuffer에 app 데이터가있는 경우이 데이터는 사라집니다. 따라서 나는 다른 버퍼에 pInputBuffer (데이터를 응용 프로그램에서) 복사해야하고 RtlCopyMemory 응용 프로그램에 데이터를 쓸 호출해야합니다. 맞습니까? – Lightstar

+0

예. 출력 데이터를 작성한 후 입력 데이터 *를 사용해야하는 경우 입력 데이터를 어딘가에 복사해야합니다. 그러나 일반적으로 입력 데이터를 먼저 처리 (예 : DbgPrint로 전송) 한 다음 출력 데이터를 버퍼에 씁니다. –

답변

0

해결되었습니다. 해결책은 입니다. 드라이버가 Irp-> AssociatedIrp.Systembuffer를 사용하여 앱에서 데이터를 수신합니다. 그래서,이 포인터의 데이터를 출력하십시오.

관련 문제