Device Driver Thread 사용 예제
Posted 2008/08/07 18:33|
|
|
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
간단하게 Thread 사용하는법 설명입니다
주의 해야 될 점은 Thread라도 항상 PASSIVE_LEVEL이 아니라는 사실 (NT Server 이상 ~~ )
VOID ThreadProc (PDEVICE_EXTENSION pdx)
{
LARGE_INTEGER delay;
delay.LowPart = (ULONG) -15000000;
delay.HighPart = -1;
while(1)
{
if (KeGetCurrentIrql() == PASSIVE_LEVEL)
{
KdPrint(("ThreadProc"));
KeDelayExecutionThread(KernelMode, FALSE, &delay );
}
}
}
{
LARGE_INTEGER delay;
delay.LowPart = (ULONG) -15000000;
delay.HighPart = -1;
while(1)
{
if (KeGetCurrentIrql() == PASSIVE_LEVEL)
{
KdPrint(("ThreadProc"));
KeDelayExecutionThread(KernelMode, FALSE, &delay );
}
}
}
DEVICE_EXTENSION DevExt;
HANDLE hThread;
// Thread Create..
ntStatus = PsCreateSystemThread(&hThread, THREAD_ALL_ACCESS, NULL, NULL, NULL,
(PKSTART_ROUTINE)ThreadProc, &DevExt);
if (!NT_SUCCESS(ntStatus))
return ntStatus;
ObReferenceObjectByHandle(hThread, THREAD_ALL_ACCESS, NULL,
KernelMode, (PVOID*) &DevExt.thread, NULL);
ZwClose(hThread);
HANDLE hThread;
// Thread Create..
ntStatus = PsCreateSystemThread(&hThread, THREAD_ALL_ACCESS, NULL, NULL, NULL,
(PKSTART_ROUTINE)ThreadProc, &DevExt);
if (!NT_SUCCESS(ntStatus))
return ntStatus;
ObReferenceObjectByHandle(hThread, THREAD_ALL_ACCESS, NULL,
KernelMode, (PVOID*) &DevExt.thread, NULL);
ZwClose(hThread);
출처 : http://www2.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=27&MAEULNo=11&no=76
위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
- Filed under : 프로그래밍/Driver
- Tag : Device Driver Thread 사용 예제
- Comment Trackback

