일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Openswan
- 리눅스
- RUBY
- VMware
- docker-compose
- opsworks
- ssh command
- 우분투
- QT
- VPN
- DevOps
- 루비
- docker
- port
- driver
- 드라이버
- 도커
- golang
- ssh
- docker container
- Linux
- 패키지
- 방화벽체크
- Chef
- docker registry
- ubuntu
- sudo
- VIM
- AWS
- window size
- 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 |