DPC 사용 방법
2307 단어 구동
DPC 사용 방법
DPC는 DeferredProcedureCall입니다. 말 그대로 일정 시간 후에 특정한 절차나 함수를 호출합니다.
만약 일정 시간 간격을 두고 자신이 쓴 함수를 실행하고 싶다면, 우리는 DPC를 사용할 수 있고, 물론 IoTimer도 사용할 수 있으며, 이후에 나는 IoTimer에 관한 것을 쓸 것이다.지금 먼저 DPC의 사용 절차를 말하고 코드 프레임을 아래에 붙인다. 코드는 Win7x86 및 Win7x64에서 시험에 통과했습니다.
단계: 1.Timer 객체 초기화 2.DPC 객체 초기화: 호출을 지연시킬 함수가 어떤 함수인지 설명합니다.3. 초기화 간격: 얼마나 간격으로 함수를 실행합니까?4. Timer 설정: 객체와 DPC를 연결합니다.
참고 드라이버를 마지막으로 마운트 해제할 때는 반드시 대상 Timer를 지워야 합니다
다른 드라이버를 통해 Timer 객체를 제거하여 DPC를 제거하는 방법을 설명하겠습니다.
#pragma once
#include
VOID DeferredProcedureCall(
_In_ struct _KDPC *Dpc,
_In_opt_ PVOID DeferredContext,
_In_opt_ PVOID SystemArgument1,
_In_opt_ PVOID SystemArgument2
);
VOID DriverUnload(PDRIVER_OBJECT DriverObject);
.c 파일
#include "DPC.h"
KTIMER Timer;
KDPC DPC;
LARGE_INTEGER DueTime;
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegisterPath)
{
NTSTATUS Status = STATUS_UNSUCCESSFUL;
DriverObject->DriverUnload = DriverUnload;
KeInitializeTimer(&Timer);
KeInitializeDpc(&DPC, (PKDEFERRED_ROUTINE)DeferredProcedureCall, NULL);
// DueTime , 1601/01/01 DPC , 100ns
// DueTime , , 100ns
DueTime = RtlConvertLongToLargeInteger(-10 * 1000000);
KeSetTimer(&Timer, DueTime, &DPC);
return STATUS_SUCCESS;
}
VOID DeferredProcedureCall(
_In_ struct _KDPC *Dpc,
_In_opt_ PVOID DeferredContext,
_In_opt_ PVOID SystemArgument1,
_In_opt_ PVOID SystemArgument2
)
{
DbgPrint("DelayProcedureCall\r
");
KeSetTimer(&Timer, DueTime, &DPC);
}
VOID DriverUnload(PDRIVER_OBJECT DriverObject)
{
KeCancelTimer(&Timer);
DbgPrint("ByeDriver\r
");
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
DPC 사용 방법DPC는 DeferredProcedureCall입니다. 말 그대로 일정 시간 후에 특정한 절차나 함수를 호출합니다. 만약 일정 시간 간격을 두고 자신이 쓴 함수를 실행하고 싶다면, 우리는 DPC를 사용할 수 있고, ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.