다음을 통해 공유


FltAllocatePoolAlignedWithTag 함수(fltkernel.h)

FltAllocatePoolAlignedWithTag 는 캐시되지 않은 I/O 작업에 사용할 디바이스 정렬 버퍼를 할당합니다.

구문

PVOID FLTAPI FltAllocatePoolAlignedWithTag(
  [in] PFLT_INSTANCE Instance,
  [in] POOL_TYPE     PoolType,
  [in] SIZE_T        NumberOfBytes,
  [in] ULONG         Tag
);

매개 변수

[in] Instance

볼륨에 연결된 호출자 소유 미니필터 드라이버 instance 대한 불투명 instance 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

[in] PoolType

할당할 풀의 유형입니다. 다음 중 하나

NonPagedPool

PagedPool

NonPagedPoolCacheAligned

PagedPoolCacheAligned

사용 가능한 풀 메모리 유형에 대한 설명은 POOL_TYPE 참조하세요.

[in] NumberOfBytes

할당할 바이트 수입니다. 이 매개 변수는 필수이며 0일 수 있습니다.

[in] Tag

할당된 메모리의 풀 태그를 지정합니다. 드라이버는 일반적으로 풀 태그를 작은따옴표(예: 'abcd')로 구분된 1~4개의 7비트 ASCII 문자 문자열로 지정합니다. 이 매개 변수는 필수이며 0일 수 없습니다.

반환 값

요청을 충족하는 데 사용 가능한 풀이 충분하지 않은 경우 FltAllocatePoolAlignedWithTagNULL 포인터를 반환합니다. 그렇지 않으면 FltAllocatePoolAlignedWithTag 는 새로 할당된 버퍼에 대한 포인터를 반환합니다.

설명

FltAllocatePoolAlignedWithTag 는 지정된 볼륨에 대한 기본 디바이스에 따라 정렬된 버퍼를 할당합니다. 이러한 디바이스 정렬 버퍼는 캐시되지 않은 I/O에 필요합니다. 캐시된 I/O에도 사용할 수 있습니다. 따라서 FltReadFileFltWriteFile과 같이 캐시되지 않은 I/O를 수행하는 루틴을 호출할 때 미니필터 드라이버는 ExAllocatePoolWithTag 대신 FltAllocatePoolAlignedWithTag를 호출해야 합니다.

호출자가 NumberOfBytes 매개 변수에 대해 0 값을 지정하는 경우 FltAllocatePoolAlignedWithTag 는 맞춤 요구 사항을 충족하는 가장 적은 양의 메모리를 할당합니다.

시스템은 Tag 매개 변수에 지정된 풀 태그를 할당된 버퍼와 연결합니다. Windows 디버거(WinDbg)와 같은 프로그래밍 도구는 할당된 각 버퍼와 연결된 풀 태그를 표시할 수 있습니다. 풀 태그의 값은 일반적으로 역순으로 표시됩니다. 예를 들어 호출자가 Tag 매개 변수의 값으로 'Fred'를 전달하는 경우 풀이 덤프되거나 디버거에서 풀 사용량을 추적할 때 이 값은 'derF'로 표시됩니다.

메모리 관리에 대한 자세한 내용은 메모리 관리를 참조하세요.

FltAllocatePoolAlignedWithTag가 할당하는 버퍼가 더 이상 필요하지 않은 경우 호출자는 FltFreePoolAlignedWithTag를 호출하여 버퍼를 해제할 책임이 있습니다.

FltAllocatePoolAlignedWithTag의 호출자는 NonPagedXxxPoolType이 지정된 경우에만 IRQL DISPATCH_LEVEL 실행할 수 있습니다. 그렇지 않으면 호출자가 IRQL <= APC_LEVEL 실행되어야 합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 fltkernel.h(Fltkernel.h 포함)
라이브러리 FltMgr.lib
IRQL <= APC_LEVEL(설명 섹션 참조)

추가 정보

ExAllocatePoolWithTag

FltFreePoolAlignedWithTag

FltReadFile

FltWriteFile