KeInsertHeadQueue 함수(ntifs.h)
입력을 즉시 사용하여 스레드 대기를 충족할 수 없는 경우 KeInsertHeadQueue 루틴은 지정된 큐의 헤드에 항목을 삽입합니다.
구문
LONG KeInsertHeadQueue(
[in, out] PRKQUEUE Queue,
[in, out] PLIST_ENTRY Entry
);
매개 변수
[in, out] Queue
호출자가 비페이지 풀에 상주 스토리지를 제공하는 초기화된 큐 개체에 대한 포인터입니다. 이 구조체는 다음과 같이 정의됩니다.
typedef struct _KQUEUE {
DISPATCHER_HEADER Header;
LIST_ENTRY EntryListHead;
ULONG CurrentCount;
ULONG MaximumCount;
LIST_ENTRY ThreadListHead;
} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
멤버 | 의미 |
---|---|
머리글 | 큐 헤더 |
EntryListHead | 큐의 첫 번째 항목에 대한 포인터 |
CurrentCount | 큐의 항목 수 |
MaximumCount | 큐에 포함될 수 있는 최대 항목 수 |
ThreadListHead | 스레드 목록의 첫 번째 항목에 대한 포인터 |
[in, out] Entry
삽입할 큐 항목에 대한 포인터입니다. 이 포인터는 상주 시스템 공간 주소여야 합니다.
반환 값
KeInsertHeadQueue 는 지정된 큐의 이전 신호 상태를 반환합니다. KeInsertHeadQueue가 호출되기 전에 0(신호되지 않음)으로 설정된 경우 KeInsertHeadQueue는 0을 반환하므로 항목이 큐에 대기되지 않았습니다. 0이 아닌 경우(신호) KeInsertHeadQueue 는 KeInsertHeadQueue 가 호출되기 전에 큐에 대기된 항목 수를 반환합니다.
설명
KeInsertHeadQueue에서 큐에 대기할 항목은 비페이지 풀에서 할당되어야 합니다. 예를 들어 호출자 정의 항목에 대한 메모리는 ExAllocatePoolWithTag를 사용하여 할당할 수 있습니다. 호출자가 고정 크기의 항목을 할당하는 경우 ExInitializeNPagedLookasideList 를 사용하여 lookaside 목록을 만들고 ExAllocateFromNPagedLookasideList 를 사용하여 할당하는 것이 특히 크기가 PAGE_SIZE 배수가 아닌 항목에 대해 ExAllocatePoolWithTag를 자주 호출하는 것보다 더 효율적입니다.
KeInsertHeadQueue를 호출할 때 큐 개체에서 대기 중인 스레드가 있으면 이 호출을 통해 단일 스레드의 대기가 충족됩니다. 스레드는 지정된 Entry 포인터를 사용하여 실행을 위해 디스패치 됩니다 .
KeInsertHeadQueue가 호출될 때 현재 큐 개체에서 대기 중인 스레드가 없는 경우 지정된 항목이 큐에 삽입되고 큐 개체의 신호 상태가 증가합니다.
드라이버 관리 내부 큐 사용에 대한 자세한 내용은 드라이버 관리 큐를 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
헤더 | ntifs.h(Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 규정 준수 규칙 | HwStorPortProhibitedDDIs(storport) |
추가 정보
ExAllocateFromNPagedLookasideList