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이 아닌 경우(신호) KeInsertQueue 는 KeInsertQueue 가 호출되기 전에 큐에 대기된 항목 수를 반환합니다.
설명
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