다음을 통해 공유


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

드라이버 관리형 내부 큐 사용에 대한 자세한 내용은 드라이버 관리 큐를 참조하세요.

요구 사항

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

추가 정보

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertHeadQueue

KeRemoveQueue