메뉴 건너뛰기

그외 개발정보


제가 뭐하는지는 아시죠?ㅋㅋ

유저 모드에서 커널모드로 마우스 이벤트를 보내면
커널 모드에서 처리하는 마우스 필터 드라이버를 만들었습니다. moufiltr 예제를 수정해서 사용하고 있습니다.

저번에 도와주셔서 필터 드라이버는 잘 설치 되었고
잘 로드도 됩니다.

그리고 DriverEntry에서 사용자 정의 오브젝트 생성하고 심볼릭링크도 해주고 AddDevice에서는 커널에서 사용하는 오브젝트를 생성합니다.
그래서 테스트 해보면 유저모드 요청도 잘 호출 되구요~~
근데 classcallback을 호출하면 죽는데 원인을 모르겠네요...

그리고 전역으로 connect data를 생성한 이유는 유저 디바이스 오브젝트가 MouFilter_IoCtl에서 connect object가 Null이라서 저장합니다.

뭐가 문제 일까요?
코드를 너무 많이 붙여서 좀 지저분해 보이긴 하네요


PDEVICE_OBJECT pDeviceObject;
CONNECT_DATA gpUpperConnectData;

PDEVICE_OBJECT pDeviceObject;
CONNECT_DATA gpUpperConnectData;

NTSTATUS
MouFilter_InternIoCtl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
{
.......................
switch (irpStack->Parameters.DeviceIoControl.IoControlCode) {

case IOCTL_INTERNAL_MOUSE_CONNECT:

if (devExt->UpperConnectData.ClassService != NULL) {
status = STATUS_SHARING_VIOLATION;
break;
}
else if (irpStack->Parameters.DeviceIoControl.InputBufferLength <
sizeof(CONNECT_DATA)) {
status = STATUS_INVALID_PARAMETER;
break;
}


connectData = ((PCONNECT_DATA)
(irpStack->Parameters.DeviceIoControl.Type3InputBuffer));

devExt->UpperConnectData = *connectData;

connectData->ClassService = MouFilter_ServiceCallback;
connectData->ClassDeviceObject = devExt->Self;

gpUpperConnectData.ClassService = devExt->UpperConnectData.ClassService;
gpUpperConnectData.ClassDeviceObject = devExt->UpperConnectData.ClassDeviceObject;

break;
........................
}
}

NTSTATUS MouFilter_IoCtl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
// 만약 사용자 정의 IOCTL을 처리하기 위해 만든 Object가 아니라면...
if(DeviceObject != pDeviceObject)
{
...............................
// kmoufir.sys 필터 드라이버의 아랫단으로 패스 시킨다.
return MouFilter_DispatchPassThrough(DeviceObject, Irp);
}

status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
irpStack = IoGetCurrentIrpStackLocation (Irp);
switch (irpStack->MajorFunction) {
case IRP_MJ_CREATE:
break;
case IRP_MJ_CLOSE:
break;
case IRP_MJ_CLEANUP:
break;
case IRP_MJ_DEVICE_CONTROL:
switch (irpStack->Parameters.DeviceIoControl.IoControlCode)
{
case IOCTL_IMOU_LBUTTON:
devExt = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

.................................. 데이터 세팅

if((gpUpperConnectData.ClassService != NULL) && (gpUpperConnectData.ClassDeviceObject != NULL))
{
KeRaiseIrql(DISPATCH_LEVEL, &oldIrql);
(*(PSERVICE_CALLBACK_ROUTINE) gpUpperConnectData.ClassService)
(gpUpperConnectData.ClassDeviceObject, &InputDataStart,
&InputDataEnd, &InputDataConsumed);
KeLowerIrql(oldIrql);
}
break;
default:
status = STATUS_INVALID_PARAMETER;
break;
}
default:
break;
}
Irp->IoStatus.Status = status;
Irp->IoStatus.Information = dwDataWritten;
IoCompleteRequest (Irp, IO_NO_INCREMENT);
return status;
}




번호 제목 글쓴이 날짜 조회 수
공지 [TIP] 라즈베리파이 3를 AP로 만들기 (How to make Raspberry Pi 3 to Access point device) 파이팅건맨 2018.01.22 4842
공지 [TIP] NEXUS(넥서스) 5x 루팅 방법입니다. 파이팅건맨 2016.01.05 3470
공지 [TIP] ASR 오픈소스 프로젝트 - Kaldi 로 나만의 STT 서비스 구축해 보기 파이팅건맨 2018.07.26 3195
47 [TIP] CentOS 7에서 MySQL의 외부 접근 허용 파이팅건맨 2017.11.11 1568
46 [TIP] CentOS 7에 MySql 5.7 설치 & 업그레이드 하기 파이팅건맨 2017.11.15 2666
45 [TIP] CentOS 7 에서 Wordpress 사이트 접속시 500 Internal 에러 낼때 파이팅건맨 2017.12.04 407
44 [TIP] CentOS 7 에서 Let's encrypt 를 위한 Certbot을 실행하고 오류를 만났을때 파이팅건맨 2017.12.04 261
43 [TIP] CentOS 7 에 MySql 설치시 주의할 점 파이팅건맨 2017.11.16 245
42 [TIP] AWS Lambda 함수에 API 키인증 설정시 400 (Forbidden)Error가 발생한다면... 파이팅건맨 2018.01.16 157
41 [TIP] AWS Lambda API에서 URL포워딩 방법 파이팅건맨 2016.08.24 264
40 [TIP] ASR 오픈소스 프로젝트 - Kaldi 로 나만의 STT 서비스 구축해 보기 파이팅건맨 2018.07.26 3195
39 [TIP] Android Studio에서 DJI SDK로 안드로이드 앱 개발시 유용한 디버깅 환경 갖추기 파이팅건맨 2018.05.20 518
38 XP/2000 에서 프린터 포트 제어 관련.. [1] 김호진 2005.10.18 786
37 WRITE_PORT_UCHAR를 이용한 마우스를 제어 [1] 궁금해요 2003.11.12 1315
36 WDM 덧셈 API 만들기 Sample 파이팅건맨 2000.06.25 1568
35 VESA 자료에서 ^^ [3] 임동악 2004.11.09 457
34 USB통신 어플리케이션 만들때요.. [1] 이상근 2003.11.14 670
33 USB이동식디스크에서.. 질문있습니다. [1] 남지환 2004.10.14 648
32 USB구동용 Device Driver를 Windows에서 Linux로 변환하려면.. [3] 이창석 2004.10.04 550
31 usb 정보 얻기 [1] 돌쇠 2006.03.31 584
30 usb 에 read/write 하는것좀 알려주세요. [1] 전영덕 2004.06.22 1436
29 USB Keyboard Filter Driver 제작 관련... [1] 나원오 2006.11.22 2619
28 URI 대응방식(uri protocol handler)설정 방법 - 브라우저별 정리 [2] 파이팅건맨 2015.05.29 1163
위로