다음을 통해 공유


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

WdfCommonBufferGetAlignedVirtualAddress

WdfDeviceGetAlignmentRequirement