WdfDeviceSetAlignmentRequirement 함수(wdfdevice.h)
[KMDF에만 적용]
WdfDeviceSetAlignmentRequirement 메서드는 메모리 전송 작업 중에 디바이스가 사용하는 데이터 버퍼에 대한 드라이버의 기본 주소 맞춤을 등록합니다.
구문
void WdfDeviceSetAlignmentRequirement(
[in] WDFDEVICE Device,
[in] ULONG AlignmentRequirement
);
매개 변수
[in] Device
프레임워크 디바이스 개체에 대한 핸들입니다.
[in] AlignmentRequirement
데이터 버퍼에 대한 하드웨어 종속 맞춤 요구 사항입니다. 이 값은 맞춤 경계보다 1보다 작아야 합니다. 예를 들어 16 바이트 맞춤 경계에 15를, 32 바이트 맞춤 경계에 31을 지정할 수 있습니다. Wdm.h에 정의된 FILE_Xxxx_ALIGNMENT 상수 중 하나를 사용할 수도 있습니다. 예를 들면 다음과 같습니다.
//
// Define alignment requirement values
//
#define FILE_BYTE_ALIGNMENT 0x00000000
#define FILE_WORD_ALIGNMENT 0x00000001
#define FILE_LONG_ALIGNMENT 0x00000003
#define FILE_QUAD_ALIGNMENT 0x00000007
#define FILE_OCTA_ALIGNMENT 0x0000000f
#define FILE_32_BYTE_ALIGNMENT 0x0000001f
#define FILE_64_BYTE_ALIGNMENT 0x0000003f
#define FILE_128_BYTE_ALIGNMENT 0x0000007f
#define FILE_256_BYTE_ALIGNMENT 0x000000ff
#define FILE_512_BYTE_ALIGNMENT 0x000001ff
반환 값
없음
설명
드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.
직접 I/O를 사용하는 드라이버는 WdfDeviceSetAlignmentRequirement 를 호출하여 기본 맞춤 요구 사항을 등록할 수 있습니다. 맞춤은 I/O 관리자를 통과하는 I/O 요청에 적용되며 IoCallDriver를 호출하는 다른 드라이버에서 드라이버로 전송된 요청은 적용되지 않습니다.
I/O 관리자가 항상 요청된 맞춤을 사용하는 것은 아니므로 드라이버는 정렬되지 않은 버퍼에 대해 준비해야 합니다.
드라이버는 WdfDeviceGetAlignmentRequirement 를 호출하여 디바이스 맞춤 요구 사항에 대한 현재 값을 가져올 수 있습니다.
I/O 관리자는 드라이버가 WdfDeviceCreate를 호출할 때 디바이스에 대한 맞춤 요구 사항 값을 설정합니다. 디바이스의 맞춤 요구 사항 값 및 드라이버가 값을 변경해야 하는 경우에 대한 자세한 내용은 WDM 설명서에서 디바이스 개체 초기화를 참조하세요.
드라이버가 컴퓨터의 페이지 크기(PAGE_SIZE)보다 큰 맞춤 요구 사항을 지정하는 경우 WdfCommonBufferGetAlignedLogicalAddress 메서드가 반환하는 논리적 주소는 항상 지정된 맞춤 요구 사항에 맞춰지지만 WdfCommonBufferGetAlignedVirtualAddress 메서드가 반환하는 가상 주소는 맞춤 요구 사항에 맞지 않을 수 있습니다.
드라이버가 컴퓨터의 페이지 크기보다 작은 맞춤 요구 사항을 지정하면 모든 논리 및 가상 주소가 지정된 맞춤 요구 사항에 맞춰집니다.
WdfDeviceSetAlignmentRequirement를 호출하는 방법에 대한 자세한 내용은 DMA 트랜잭션 사용 및 공통 버퍼 사용을 참조하세요.
예제
다음 코드 예제는 AMCC5933 샘플 드라이버에서 가져옵니다. 이 예제에서는 디바이스의 현재 맞춤 요구 사항을 확인하고 필요한 경우 맞춤 요구 사항을 새 값으로 설정합니다. 정확한 맞춤 값은 하드웨어에 따라 달라집니다.
ULONG alignReq;
alignReq = WdfDeviceGetAlignmentRequirement(device);
if (alignReq < AMCC5933_ALIGNMENT__32BITS) {
//
// Set the S5933 alignment requirement to a new value.
//
WdfDeviceSetAlignmentRequirement(
device,
AMCC5933_ALIGNMENT__32BITS
);
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 KMDF 버전 | 1.0 |
머리글 | wdfdevice.h(Wdf.h 포함) |
라이브러리 | Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조) |
IRQL | <= DISPATCH_LEVEL |
DDI 규정 준수 규칙 | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |
추가 정보
WdfCommonBufferGetAlignedLogicalAddress