메뉴 건너뛰기

그외 개발정보


keyboard filter에 쓰기 기능

김민호 2003.09.06 10:40 조회 수 : 550

안녕하세요....

키보드 에뮬을 만들고 있는데 잘 돼지 않아서 이렇게 문의 올립니다.

제가 드라이버 호출을 하는 부분입니다.

schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

if (!schSCManager)

{

return TRUE;

}

GetCurrentDirectory( 255, Path );

strcpy( Path + strlen(Path), FILENAME );

schService = CreateService(schSCManager,

SRVNAME,

SRVNAME,

SERVICE_ALL_ACCESS,

SERVICE_KERNEL_DRIVER,

SERVICE_DEMAND_START,

SERVICE_ERROR_NORMAL,

Path,

NULL,

NULL,

NULL,

NULL,

NULL);

if (schService == NULL)

{

schService = OpenService(schSCManager, SRVNAME, SERVICE_ALL_ACCESS );

if (schService == NULL)

{

CloseServiceHandle(schSCManager);

return FALSE;

}

StartService(schService, 0, NULL );

CloseServiceHandle(schService);

CloseServiceHandle(schSCManager);

}

else

{

StartService(schService, 0, NULL );

CloseServiceHandle(schService);

CloseServiceHandle(schSCManager);

}

// Driver를 Open 한다.

handle = CreateFile( CFILENAME,

GENERIC_READorGENERIC_WRITE,

FILE_SHARE_READorFILE_SHARE_WRITE,

0,

OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL,

0 );

if ( handle != INVALID_HANDLE_VALUE )

{

printf("File Open Succeed!!!\n");

USHORT keyStatus=0;

DeviceIoControl(handle, IOCTL_DEVGURU_KEYSTATUS, NULL, 0, &keyStatus, sizeof(keyStatus), &dwRet, 0);

CloseHandle(handle);

}

위의 호출에서 DeviceConrol부분에서 호출 되는 것은 확인을 했습니다.

이부분은 갑을 읽어 오는 부분인데 디바이스에 값을 입력하려면 어케 하는지 난감하군요...

정확하게 어디에 넣어야 할지...

USHORT KeyBoardStatus()

/*++

Routine Description:

KeyBoard의 토글키.. 상태를 얻어오는 루틴.

Arguments:

Return Value:

KeyStatus

KEYBOARD_CAPS_LOCK_ON 4

KEYBOARD_NUM_LOCK_ON 2

KEYBOARD_SCROLL_LOCK_ON 1

--*/

{

// ULONG dwType;

USHORT keyStatus;

PIRP irp;

IO_STATUS_BLOCK ioStatus;

NTSTATUS status;

KEYBOARD_INDICATOR_PARAMETERS keyInfo;

KEVENT event;

PDEVICE_OBJECT keyDeviceObject = NULL;

PFILE_OBJECT fileObject;

UNICODE_STRING keyName;

RtlInitUnicodeString( &keyName, NT_KEYBOARD_NAME0 );

// KeyBoard Class DeviceObject를 얻어온다.

status = IoGetDeviceObjectPointer( &keyName,

FILE_READ_ATTRIBUTES,

&fileObject,

&keyDeviceObject );

// 얻지 못할 경우.

if( !keyDeviceObject )

return -1;

// Irp 처리가 완료 되기를 기다리기 위한 이벤트..

KeInitializeEvent(&event, NotificationEvent, FALSE);

// Irp 생성.

irp = IoBuildDeviceIoControlRequest( IOCTL_KEYBOARD_QUERY_INDICATORS,

keyDeviceObject,

&keyInfo,

sizeof(KEYBOARD_INDICATOR_PARAMETERS ),

&keyInfo,

sizeof(KEYBOARD_INDICATOR_PARAMETERS ),

FALSE,

&event,

&ioStatus );

// keyboard Class Driver에게 Irp 전달.

status = IoCallDriver(keyDeviceObject, irp);

// 완료를 기달린다.

status = KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL);

// 상태값..

keyStatus = keyInfo.LedFlags;

return keyStatus;

}

실제 드라이버에서 호출 되는 함수 입니다.




번호 제목 글쓴이 날짜 조회 수
공지 [TIP] 라즈베리파이 3를 AP로 만들기 (How to make Raspberry Pi 3 to Access point device) 파이팅건맨 2018.01.22 7591
공지 [TIP] ASR 오픈소스 프로젝트 - Kaldi 로 나만의 STT 서비스 구축해 보기 파이팅건맨 2018.07.26 5198
공지 [TIP] NEXUS(넥서스) 5x 루팅 방법입니다. 파이팅건맨 2016.01.05 4080
31 건우님 장치관리자 문의 있습니다. [2] 2004.02.17 547
30 뒷북일지 모르지만.. bootsect.asm에 버그있네요.. [2] 장진호 2004.02.12 560
29 토글키 만들기 예제를 키 인풋으로 전환하는데 [1] 질문 2004.01.13 764
28 [질문] 다른 OS에서 사용한 HDD를 섹터단위로 Read하는 방법. [1] 이중락 2003.12.12 731
27 print port 제어 [1] 이성구 2003.12.08 531
26 드라이브 타입을 알고 싶습니다(A:, C:, F:....) [1] 돌쇠 2003.12.03 548
25 USB통신 어플리케이션 만들때요.. [1] 이상근 2003.11.14 733
24 WRITE_PORT_UCHAR를 이용한 마우스를 제어 [1] 궁금해요 2003.11.12 1333
23 성의 있는 답변 너무너무 감사합니다. [1] 노건우 2003.11.11 440
22 [질문]ClassGuid와 Interface Guid [6] 노건우 2003.11.10 1048
21 DMA관련 질문... [1] 장상현 2003.11.05 473
20 DeviceIoControl 사용법 [1] 이정은 2003.11.05 746
19 inf 파일을 이용한 드라이버 자동 설치 [2] 안민선 2003.09.23 2113
18 232통신 데이타 질문 [1] 김태완 2003.09.08 492
» keyboard filter에 쓰기 기능 [3] 김민호 2003.09.06 550
16 수신값이 좀 애매해서...요 [1] 김태완 2003.08.25 477
15 각각 다른값을 수신측에 보낼려면 김태완 2003.08.23 496
14 데브피아에 글을올린 김태완입니다. 김태완 2003.08.21 1480
13 [질문]VxD에서 Event 오브젝트 사용방법 [1] 김지웅 2003.06.17 492
12 디바이스 제어 프로그래밍을 공부하고 싶은데요.. [1] 욱이 2003.06.12 564
위로