다음을 통해 공유


KeInsertQueue 함수(ntifs.h)

KeInsertQueue 루틴은 스레드 대기를 충족하기 위해 항목을 즉시 사용할 수 없는 경우 지정된 큐의 꼬리에 항목을 삽입합니다.

통사론

LONG KeInsertQueue(
  [in, out] PRKQUEUE    Queue,
  [in, out] PLIST_ENTRY Entry
);

매개 변수

[in, out] Queue

호출자가 페이지가 없는 풀에 상주 스토리지를 제공하는 초기화된 큐 개체에 대한 포인터입니다.

[in, out] Entry

큐에 대기할 항목에 대한 포인터입니다. 이 포인터는 상주 시스템 공간 주소여야 합니다.

반환 값

KeInsertQueue 지정된 이전 신호 상태를 반환합니다. KeInsertQueue 호출되기 전에 0(즉, 신호가 표시되지 않음)으로 설정된 경우 KeInsertQueue 0을 반환하므로 항목이 큐에 대기되지 않았습니다. 0이 아닌 경우(신호) KeInsertQueueKeInsertQueue 호출되기 전에 큐에 대기된 항목 수를 반환합니다.

발언

KeInsertQueue 큐에 대기할 항목은 비페이지 풀에서 할당되어야 합니다. 예를 들어 호출자 정의 항목에 대한 메모리는 ExAllocatePoolWithTag사용하여 할당할 수 있습니다. 호출자가 고정 크기의 항목을 할당하는 경우 ExInitializeNPagedLookasideList 사용하여 lookaside 목록을 만들고 ExAllocateFromNPagedLookasideList 사용하여 할당하는 것이 특히 크기가 여러 PAGE_SIZE 아닌 항목의 경우 ExAllocatePoolWithTag자주 호출하는 것보다 더 효율적입니다.

KeInsertQueue 호출될 때 스레드가 큐 개체에서 대기하는 경우 이 호출을 통해 단일 스레드의 대기가 충족됩니다. 스레드는 지정된 Entry 포인터를 사용하여 실행을 위해 디스패치됩니다.

KeInsertQueue 호출될 때 현재 큐 개체에서 대기 중인 스레드가 없는 경우 지정된 항목이 큐에 삽입되고 큐 개체의 신호 상태가 증가합니다.

드라이버 관리 내부 큐를 사용하는 방법에 대한 자세한 내용은 Driver-Managed 큐참조하세요.

요구 사항

요구
대상 플랫폼 보편적
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport)

참고 항목

ExAllocateFromNPagedLookasideList

exAllocatePoolWithTag

exInitializeNPagedLookasideList

KeInitializeQueue

KeInsertHeadQueue

KeRemoveQueue