일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 우분투
- golang
- 루비
- ubuntu
- driver
- window size
- 리눅스
- sudo
- QT
- 도커
- docker-compose
- Linux
- VPN
- ssh
- Chef
- docker
- DevOps
- ssh command
- docker container
- port
- opsworks
- VMware
- 드라이버
- 패키지
- VIM
- 방화벽체크
- Openswan
- RUBY
- AWS
- docker registry
- Today
- Total
구리의 창고
Application과 Driver 이벤트 공유하기 본문
[ Application에서 처리 ]
// 1. Application에서 Driver와 이벤트 공유를 위해서 Named Event 객체 생성.
m_hWaitEvent = CreateEvent(NULL, FALSE, FALSE, "WaitUpdateEvent");
// 2. Driver에서 이벤트 공유를 위한 시점을 알려 주기 위한 IOCTL Code 선언.
#define IOCTL_EVENT_SETTING CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)
// 3. Driver에게 IOCTL Code 전송.
DeviceIoControl(pDev->hDevice, IOCTL_EVENT_SETTING, NULL, NULL, NULL, NULL, &dwRet, NULL);
// 4. Driver에서 통지하는 Event를 대기함.
WaitForSingleObject(pDev->m_hWaitEvent, INFINITE);
[ Driver에서 처리 ]
// 1. IOCTL_EVENT_SETTING의 Ioctl Code를 받아서 처리.
irpStack = IoGetCurrentIrpStackLocation(Irp);
cbin =
irpStack->Parameters.DeviceIoControl.InputBufferLength;
cbout =
irpStack->Parameters.DeviceIoControl.OutputBufferLength;
code =
irpStack->Parameters.DeviceIoControl.IoControlCode;
switch (code)
{
case IOCTL_EVENT_SETTING:
KdPrint(("[FileIODriver] - IOCTL_EVENT_SETTING\n"));
RtlInitUnicodeString(&EventName, (L"\\BaseNamedObjects\\WaitUpdateEvent"));
SharedEvent = IoCreateNotificationEvent(&EventName,
&SharedEventHandle);
if( NULL != SharedEvent)
{
KdPrint(("[FileIODriver] - Success to
IoCreateNotificationEvent().\n"));
ObReferenceObject(SharedEvent);
}
else
{
KdPrint(("[FileIODriver] - Fail to
IoCreateNotificationEvent().\n"));
status =
STATUS_UNSUCCESSFUL;
}
break;
default:
break;
}
// 2. Application에게 이벤트 통지함.
KeSetEvent(SharedEvent, 0, FALSE);
'Window Driver' 카테고리의 다른 글
키보드, 마우스 디바이스 드라이버 동적 로딩하기 (0) | 2010.03.14 |
---|---|
mouclass에서 callback 함수 리턴받기 (0) | 2010.03.12 |
RtlQueryRegistryValues, RtlWriteRegistryValue, RtlDeleteRegistryValue (0) | 2010.03.03 |
USB 드라이버 인터럽트 통신에서 데이터 받아오기 (2) | 2010.02.27 |
USB드라이버가 URB를 IRP에 담아서 사용하는 방법 (0) | 2010.02.25 |