Windows 커널 불투명 구조체

이 문서에서는 Windows 커널 불투명 구조를 나열하고 설명합니다. 이러한 구조의 대부분은 드라이버가 멤버에 액세스하거나 변경해서는 안 되며 대신 시스템 제공 루틴을 사용하여 정보에 액세스해야 합니다. 자세한 내용은 각 구조를 참조하세요.

EPROCESS

EPROCESS 구조체는 프로세스의 프로세스 개체 역할을 하는 불투명 구조체입니다.

PsGetProcessCreateTimeQuadPart와 같은 일부 루틴은 EPROCESS를 사용하여 작동할 프로세스를 식별합니다. 드라이버는 PsGetCurrentProcess 루틴을 사용하여 현재 프로세스에 대한 프로세스 개체에 대한 포인터를 가져올 수 있으며 ObReferenceObjectByHandle 루틴을 사용하여 지정된 핸들과 연결된 프로세스 개체에 대한 포인터를 가져올 수 있습니다. PsInitialSystemProcess 전역 변수는 시스템 프로세스에 대한 프로세스 개체를 가리킵니다.

프로세스 개체는 Object Manager 개체입니다. 드라이버는 개체의 참조 수를 유지하려면 ObReferenceObjectObDereferenceObject 와 같은 개체 관리자 루틴을 사용해야 합니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

ETHREAD

ETHREAD 구조체는 스레드의 스레드 개체 역할을 하는 불투명 구조체입니다.

PsIsSystemThread와 같은 일부 루틴은 ETHREAD를 사용하여 작동할 스레드를 식별합니다. 드라이버는 PsGetCurrentThread 루틴을 사용하여 현재 스레드에 대한 스레드 개체에 대한 포인터를 가져올 수 있으며 ObReferenceObjectByHandle 루틴을 사용하여 지정된 핸들과 연결된 스레드 개체에 대한 포인터를 가져올 수 있습니다.

스레드 개체는 Object Manager 개체입니다. 드라이버는 개체의 참조 수를 유지하려면 ObReferenceObjectObDereferenceObject 와 같은 개체 관리자 루틴을 사용해야 합니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

EX_RUNDOWN_REF

EX_RUNDOWN_REF 구조는 연결된 공유 개체에 대한 런다운 보호의 상태 대한 정보를 포함하는 불투명한 시스템 구조체입니다.

typedef struct _EX_RUNDOWN_REF {
  
  ...  // opaque
  
} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;

이 페이지의 맨 아래에 나열된 런다운 보호 루틴은 모두 EX_RUNDOWN_REF 구조체에 대한 포인터를 첫 번째 매개 변수로 사용합니다.

자세한 내용은 Run-Down Protection을 참조하세요. 헤더: Wdm.h. Wdm.h를 포함합니다.

EX_TIMER

EX_TIMER 구조는 운영 체제가 EX_TIMER 타이머 개체를 나타내는 데 사용하는 불투명 구조체입니다.

typedef struct _EX_TIMER *PEX_TIMER;

이 구조체의 모든 멤버는 드라이버에 불투명합니다.

다음 ExXxx타이머 루틴에는 입력 매개 변수로 시스템이 할당한 EX_TIMER 구조체에 대한 포인터가 필요합니다.

운영 체제는 EX_TIMER 기반 타이머 개체를 만듭니다. 이러한 타이머 개체를 가져오기 위해 드라이버는 ExAllocateTimer 루틴을 호출합니다. 이 개체가 더 이상 필요하지 않은 경우 드라이버는 ExDeleteTimer를 호출하여 개체를 삭제할 책임이 있습니다.

자세한 내용은 ExXxx타이머 루틴 및 EX_TIMER 개체를 참조하세요.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

FAST_MUTEX

FAST_MUTEX 구조는 빠른 뮤텍스를 나타내는 불투명 데이터 구조입니다. ExInitializeFastMutex 루틴은 이 구조를 초기화합니다.

빠른 뮤텍스에 대한 자세한 내용은 빠른 뮤텍스 및 보호된 뮤텍스를 참조하세요.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ

IO_CSQ 구조는 드라이버의 취소 안전 IRP 큐 루틴을 지정하는 데 사용되는 불투명 구조입니다. 이 구조체의 멤버를 직접 설정하지 마세요. IoCsqInitialize 또는 IoCsqInitializeEx를 사용하여 이 구조를 초기화합니다.

취소 안전 IRP 큐를 사용하는 방법에 대한 개요는 Cancel-Safe IRP 큐를 참조하세요.

Microsoft Windows XP 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

IO_CSQ_IRP_CONTEXT

IO_CSQ_IRP_CONTEXT 구조는 드라이버의 취소 안전 IRP 큐에서 IRP에 대한 IRP 컨텍스트를 지정하는 데 사용되는 불투명 데이터 구조입니다. IoCsqInsertIrp, IoCsqInsertIrpExIoCsqRemoveIrp 루틴은 이 구조를 키로 사용하여 큐의 특정 IRP를 식별합니다.

취소 안전 IRP 큐를 사용하는 방법에 대한 개요는 Cancel-Safe IRP 큐를 참조하세요.

Microsoft Windows XP 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

IO_WORKITEM

IO_WORKITEM 구조체는 시스템 작업자 스레드의 작업 항목을 설명하는 불투명 구조체입니다.

드라이버는 IoAllocateWorkItem을 호출하여 작업 항목을 할당할 수 있습니다. 또는 드라이버가 자체 버퍼를 할당한 다음 IoInitializeWorkItem을 호출하여 해당 버퍼를 작업 항목으로 초기화할 수 있습니다.

IoAllocateWorkItem에서 할당하는 모든 작업 항목은 IoFreeWorkItem에서 해제해야 합니다. IoInitializeWorkItem으로 초기화된 모든 메모리는 IoUninitializeWorkItem에서 초기화되지 않아야 해제할 수 있습니다.

작업 항목에 대한 자세한 내용은 시스템 작업자 스레드를 참조하세요.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

KBUGCHECK_CALLBACK_RECORD

KBUGCHECK_CALLBACK_RECORD 구조는 KeRegisterBugCheckCallbackKeDeregisterBugCheckCallback 루틴에서 사용하는 불투명 구조체입니다.

KBUGCHECK_CALLBACK_RECORD 구조는 KeRegisterBugCheckReasonCallbackKeDeregisterBugCheckReasonCallback 루틴에서 책갈피에 사용됩니다.

구조체는 비페이지 풀과 같은 상주 메모리에 할당되어야 합니다. KeInitializeCallbackRecord 루틴을 사용하여 구조를 사용하기 전에 초기화합니다.

헤더: Ntddk.h. 포함: Ntddk.h.

KBUGCHECK_REASON_CALLBACK_RECORD

KBUGCHECK_REASON_CALLBACK_RECORD 구조는 KeRegisterBugCheckReasonCallbackKeDeregisterBugCheckReasonCallback 루틴에서 사용하는 불투명 구조입니다.

KBUGCHECK_REASON_CALLBACK_RECORD 구조는 KeRegisterBugCheckReasonCallbackKeDeregisterBugCheckReasonCallback 루틴에서 책갈피에 사용됩니다.

구조체는 비페이지 풀과 같은 상주 메모리에 할당되어야 합니다. KeInitializeCallbackRecord 루틴을 사용하여 구조를 사용하기 전에 초기화합니다.

Microsoft Windows XP SP1(서비스 팩 1), Windows Server 2003 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.

헤더: Ntddk.h. 포함: Ntddk.h.

KDPC

KDPC 구조체는 DPC 개체를 나타내는 불투명 구조체입니다. 이 구조체의 멤버를 직접 설정하지 마세요. DPC 개체 및 DPC를 참조하세요.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

KFLOATING_SAVE

KFLOATING_SAVE 구조체는 KeSaveFloatingPointState 루틴이 저장한 부동 소수점 상태를 설명하는 불투명 구조체입니다.

KeRestoreFloatingPointState를 사용하여 부동 소수점 상태를 복원합니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

KGUARDED_MUTEX

KGUARDED_MUTEX 구조체는 보호된 뮤텍스를 나타내는 불투명 구조체입니다.

KeInitializeGuardedMutex를 사용하여 KGUARDED_MUTEX 구조를 보호된 뮤텍스로 초기화합니다.

보호된 뮤텍스는 페이징되지 않은 풀에서 할당되어야 합니다.

보호된 뮤텍스에 대한 자세한 내용은 빠른 뮤텍스 및 보호된 뮤텍스를 참조하세요.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

KINTERRUPT

KINTERRUPT 구조체는 시스템의 인터럽트를 나타내는 불투명 구조체입니다.

IoConnectInterruptEx는 드라이버가 InterruptService 또는 InterruptMessageService 루틴을 등록할 때 인터럽트에 대한 KINTERRUPT 구조체에 대한 포인터를 제공합니다. 드라이버는 인터럽트 스핀 잠금을 획득하거나 해제할 때 이 포인터를 사용합니다. 또한 드라이버는 InterruptService 루틴의 등록을 취소할 때 이 포인터를 사용합니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

KLOCK_QUEUE_HANDLE

KLOCK_QUEUE_HANDLE 구조체는 대기 중인 스핀 잠금을 설명하는 불투명 구조체입니다. 드라이버는 KLOCK_QUEUE_HANDLE 구조를 할당하고 KeAcquireInStackQueuedSpinLockKeAcquireInStackQueuedSpinLockAtDpcLevel 에 전달하여 대기된 스핀 잠금을 획득합니다. 이러한 루틴은 큐에 대기 중인 스핀 잠금을 나타내도록 구조를 초기화합니다. 드라이버는 스핀 잠금을 해제할 때 구조를 KeReleaseInStackQueuedSpinLockKeReleaseInStackQueuedSpinLockFromDpcLevel 에 전달합니다.

자세한 내용은 큐에 대기된 스핀 잠금을 참조하세요.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

KTIMER

KTIMER 구조체는 타이머 개체를 나타내는 불투명 구조체입니다. 이 구조체의 멤버를 직접 설정하지 마세요. 자세한 내용은 타이머 개체 및 DPC를 참조하세요.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

LOOKASIDE_LIST_EX

LOOKASIDE_LIST_EX 구조체는 lookaside 목록을 설명합니다.

typedef struct _LOOKASIDE_LIST_EX {
  ...  // opaque
} LOOKASIDE_LIST_EX, *PLOOKASIDE_LIST_EX;

lookaside 목록은 드라이버가 시스템 할당 루틴에 대한 호출 수를 줄이기 위해 로컬로 관리할 수 있는 고정 크기 버퍼 풀로, 성능을 향상시킵니다. 버퍼는 균일한 크기이며 lookaside 목록에 항목으로 저장됩니다.

드라이버는 LOOKASIDE_LIST_EX 구조를 불투명으로 처리해야 합니다. 구조체 멤버에 액세스하거나 이러한 멤버의 위치에 종속된 드라이버는 다른 드라이버와 이식 가능하고 상호 운용성이 유지되지 않을 수 있습니다.

관련 문서 섹션에는 이 구조를 사용하는 루틴 목록이 포함되어 있습니다.

lookaside 목록에 대한 자세한 내용은 Lookaside Lists 사용을 참조하세요.

64비트 플랫폼에서 이 구조체는 16 바이트 정렬되어야 합니다.

Windows Vista부터 지원됩니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

NPAGED_LOOKASIDE_LIST

NPAGED_LOOKASIDE_LIST 구조체는 비페이지 풀에서 할당된 고정 크기 버퍼의 lookaside 목록을 설명하는 불투명 구조체입니다. 시스템은 새 항목을 만들고 필요에 따라 목록에 사용되지 않는 항목을 삭제합니다. 고정 크기 버퍼의 경우 lookaside 목록을 사용하는 것이 메모리를 직접 할당하는 것보다 빠릅니다.

ExInitializeNPagedLookasideList를 사용하여 lookaside 목록을 초기화합니다. ExAllocateFromNPagedLookasideList를 사용하여 목록에서 버퍼를 할당하고 ExFreeToNPagedLookasideList를 사용하여 버퍼를 목록에 반환합니다.

드라이버는 언로드하기 전에 만든 모든 lookaside 목록을 항상 명시적으로 해제해야 합니다. 그렇지 않으면 심각한 프로그래밍 오류입니다. ExDeleteNPagedLookasideList를 사용하여 목록을 해제합니다.

드라이버는 페이징 풀에 lookaside 목록을 사용할 수도 있습니다. Windows 2000부터 PAGED_LOOKASIDE_LIST 구조는 페이징된 버퍼가 포함된 lookaside 목록을 설명합니다. Windows Vista부터 LOOKASIDE_LIST_EX 구조체는 페이징된 버퍼 또는 페이지가 없는 버퍼를 포함하는 lookaside 목록을 설명할 수 있습니다. 자세한 내용은 Lookaside Lists 사용을 참조하세요.

64비트 플랫폼에서 이 구조체는 16 바이트 정렬되어야 합니다.

Windows 2000부터 지원됩니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

Object_Type

OBJECT_TYPE 핸들의 개체 형식을 지정하는 불투명 구조체입니다. 자세한 내용은 ObReferenceObjectByHandle을 참조하세요.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

PAGED_LOOKASIDE_LIST

PAGED_LOOKASIDE_LIST 구조체는 페이징 풀에서 할당된 고정 크기 버퍼의 lookaside 목록을 설명하는 불투명 구조체입니다. 시스템은 새 항목을 만들고 필요에 따라 목록에 사용되지 않는 항목을 삭제합니다. 고정 크기 버퍼의 경우 lookaside 목록을 사용하는 것이 메모리를 직접 할당하는 것보다 빠릅니다.

ExInitializePagedLookasideList를 사용하여 lookaside 목록을 초기화합니다. ExAllocateFromPagedLookasideList를 사용하여 목록에서 버퍼를 할당하고 ExFreeToPagedLookasideList를 사용하여 버퍼를 목록에 반환합니다.

드라이버는 언로드하기 전에 만든 모든 lookaside 목록을 항상 명시적으로 해제해야 합니다. 그렇지 않으면 심각한 프로그래밍 오류입니다. ExDeletePagedLookasideList를 사용하여 목록을 해제합니다.

드라이버는 페이지가 없는 풀에 lookaside 목록을 사용할 수도 있습니다. Windows 2000부터 NPAGED_LOOKASIDE_LIST 구조는 페이지가 없는 버퍼가 포함된 lookaside 목록을 설명합니다. Windows Vista부터 LOOKASIDE_LIST_EX 구조체는 페이징된 버퍼 또는 페이지가 없는 버퍼를 포함하는 lookaside 목록을 설명할 수 있습니다. 자세한 내용은 Lookaside Lists 사용을 참조하세요.

64비트 플랫폼에서 이 구조체는 16 바이트 정렬되어야 합니다.

Windows 2000부터 지원됩니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

RTL_BITMAP

RTL_BITMAP 구조체는 비트맵을 설명하는 불투명 구조체입니다.

typedef struct _RTL_BITMAP {
  // opaque
} RTL_BITMAP, *PRTL_BITMAP;

이 구조체의 멤버에 직접 액세스하지 마세요. 멤버 위치에 대한 종속성이 있거나 멤버 값에 직접 액세스하는 드라이버는 이후 버전의 Windows 운영 체제와 호환되지 않을 수 있습니다.

RTL_BITMAP 구조체는 임의 길이의 범용 1차원 비트맵에 대한 헤더 역할을 합니다. 드라이버는 이러한 비트맵을 재사용 가능한 항목 집합을 추적하는 경제적인 방법으로 사용할 수 있습니다. 예를 들어 파일 시스템은 비트맵을 사용하여 파일 데이터를 보유하기 위해 이미 할당된 하드 디스크의 클러스터 및 섹터를 추적할 수 있습니다.

RTL_BITMAP 구조를 사용하는 RtlXxx 루틴 목록은 관련 문서 섹션을 참조하세요. 이러한 RtlXxx 루틴의 호출자는 RTL_BITMAP 구조와 비트맵이 포함된 버퍼에 대한 스토리지를 할당합니다. 이 버퍼는 메모리의 4바이트 경계에서 시작해야 하며 4바이트 길이의 배수여야 합니다. 비트맵은 버퍼 시작 시 시작되지만 할당된 버퍼에 맞는 비트 수를 포함할 수 있습니다.

rtlXxx 루틴에 매개 변수로 RTL_BITMAP 구조를 제공하기 전에 RtlInitializeBitMap 루틴을 호출하여 구조를 초기화합니다. 이 루틴에 대한 입력 매개 변수는 비트맵과 비트맵의 크기(비트)를 포함하는 버퍼에 대한 포인터입니다. RtlInitializeBitMap 은 이 버퍼의 내용을 변경하지 않습니다.

호출자가 페이징된 메모리의 RTL_BITMAP 구조 및 비트맵에 대한 스토리지를 할당하는 경우 호출자는 관련 문서 섹션에 나열된 RtlXxx 루틴에 매개 변수로 이 구조체에 대한 포인터를 전달하면 IRQL <= APC_LEVEL 실행되어야 합니다. 호출자가 페이지가 없는 메모리(또는 잠긴 페이징 메모리에서)에서 스토리지를 할당하는 경우 호출자는 RtlXxx 루틴을 호출할 때 모든 IRQL에서 실행될 수 있습니다.

Windows 2000 이상 버전의 Windows에서 지원됩니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

RTL_RUN_ONCE

RTL_RUN_ONCE 구조체는 일회성 초기화에 대한 정보를 저장하는 불투명 구조체입니다.

드라이버는 다른 RtlRunOnceXxx 루틴에 전달하기 전에 RtlRunOnceInitialize 루틴을 호출하여 이 구조를 초기화해야 합니다.

Windows Vista 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.

헤더: Ntddk.h. 포함: Ntddk.h.

SECURITY_SUBJECT_CONTEXT

SECURITY_SUBJECT_CONTEXT 구조는 특정 작업이 수행되는 보안 컨텍스트를 나타내는 불투명 구조체입니다. 드라이버는 보안 결정을 내리기 위해 이 구조의 멤버를 수정하거나 직접 액세스하려고 시도해서는 안 됩니다. 대신 권한 부여의 보안 문제를 방지하려면 SeAccessCheck 또는 SePrivilegeCheck 호출에서 이 불투명 구조를 전달합니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

SLIST_HEADER

SLIST_HEADER 구조체는 시퀀싱된 연결 목록의 헤더 역할을 하는 불투명 구조체입니다. 자세한 내용은 Singly 및 이중 연결 Lists 참조하세요.

64비트 플랫폼에서 SLIST_HEADER 구조체는 16비트 정렬되어야 합니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

XSTATE_SAVE

XSTATE_SAVE 구조는 커널 모드 드라이버가 저장하고 복원하는 확장 프로세서 상태 정보를 설명하는 불투명 구조입니다.

typedef struct _XSTATE_SAVE {
  ...  // opaque
} XSTATE_SAVE, *PXSTATE_SAVE;

모든 멤버는 불투명합니다.

KeSaveExtendedProcessorStateKeRestoreExtendedProcessorState 루틴은 이 구조를 사용합니다.

Windows 운영 체제의 Windows 7 이상 버전에서 지원됩니다.

헤더: Wdm.h. 포함: Wdm.h, Ntddk.h, Ntifs.h.

ExAcquireFastMutex

ExAcquireFastMutexUnsafe

ExAllocateFromLookasideListEx

ExAllocateFromNPagedLookasideList

ExAllocateFromPagedLookasideList

ExAllocateTimer

ExDeletePagedLookasideList

ExFreeToPagedLookasideList

ExInitializePagedLookasideList

ExCancelTimer

ExDeleteLookasideListEx

ExDeleteNPagedLookasideList

ExDeleteTimer

ExFlushLookasideListEx

ExFreeToLookasideListEx

ExFreeToNPagedLookasideList

ExInitializeLookasideListEx

ExInitializeNPagedLookasideList

ExInitializeSListHead

ExInterlockedFlushSList

ExInterlockedPopEntrySList

ExInterlockedPushEntrySList

ExQueryDepthSList

ExReleaseFastMutex

ExReleaseFastMutexUnsafe

ExSetTimer

ExTryToAcquireFastMutex

ExTimerCallback

IoAllocateWorkItem

IoConnectInterruptEx

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoDisconnectInterruptEx

IoFreeWorkItem

IoInitializeWorkItem

IoRequestDpc

IoUninitializeWorkItem

KeAcquireGuardedMutex

KeAcquireGuardedMutexUnsafe

KeAcquireInStackQueuedSpinLock

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireInterruptSpinLock

KeCancelTimer

KeInitializeCallbackRecord

KeInitializeGuardedMutex

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeRestoreExtendedProcessorState

KeSaveExtendedProcessorState

KeSetTimer

KeSetTimerEx

KeDeregisterBugCheckCallback

KeDeregisterBugCheckReasonCallback

KeInsertQueueDpc

KeRegisterBugCheckCallback

KeRegisterBugCheckReasonCallback

KeReleaseGuardedMutexUnsafe

KeReleaseInStackQueuedSpinLock

KeReleaseInStackQueuedSpinLockFromDpcLevel

KeReleaseInterruptSpinLock

KeRestoreFloatingPointState

KeSaveFloatingPointState

KeSynchronizeExecution

LookasideListAllocateEx

LookasideListFreeEx

ObReferenceObjectByHandle

PsGetCurrentProcess

PsGetProcessCreateTimeQuadPart

PsInitialSystemProcess

PsIsSystemThread

버그 검사 콜백 데이터 읽기

RtlRunOnceBeginInitialize

RtlRunOnceComplete

RtlRunOnceExecuteOnce

RtlRunOnceInitialize

RunOnceInitialization

런다운 보호

SeAccessCheck

SeAssignSecurity

SeAssignSecurityEx