IOCTL_ACPI_EVAL_METHOD IOCTL(acpiioct.h)
디바이스용 드라이버는 IOCTL_ACPI_EVAL_METHOD 디바이스 제어 요청을 사용하여 디바이스에서 지원하는 ACPI 컨트롤 메서드를 동기적으로 평가할 수 있습니다. 드라이버는 IoBuildDeviceIoControlRequest를 호출하고 다음 입력 및 출력 매개 변수를 전달하여 이 요청을 빌드해야 합니다.
주 코드
입력 버퍼
다음과 같이 IoBuildDeviceIoControlRequest 입력 매개 변수를 설정합니다.
- IoControlCode 는 IOCTL_ACPI_EVAL_METHOD.
- DeviceObject 는 디바이스의 PDO(물리적 디바이스 개체)에 대한 포인터로 설정됩니다.
- InputBuffer 는 컨트롤 메서드에 전달할 입력 인수의 형식에 따라 달라지는 입력 버퍼 구조에 대한 포인터로 설정됩니다. 이 IOCTL에서 지원하는 입력 인수 유형에 대한 자세한 내용은 이 항목의 뒷부분에 있는 설명 섹션을 참조하세요.
- InputBufferLength 는 InputBuffer에서 제공하는 입력 버퍼의 크기(바이트)로 설정됩니다.
- OutputBufferLength 는 OutputBuffer에서 제공하는 출력 버퍼의 크기(바이트)를 제공합니다.
- InternalDeviceIoControl 이 FALSE로 설정됩니다.
- 이벤트는 호출자가 할당하고 초기화된 이벤트 개체에 대한 포인터로 설정됩니다.
입력 버퍼 길이
InputBufferLength 는 InputBuffer에서 제공하는 입력 버퍼의 크기(바이트)로 설정됩니다.
출력 버퍼
다음과 같이 IoBuildDeviceIoControlRequest 출력 매개 변수를 설정합니다.
- OutputBuffer 는 컨트롤 메서드의 출력 인수를 포함하는 ACPI_EVAL_OUTPUT_BUFFER 구조체에 대한 포인터를 제공합니다.
- IoStatusBlock 은 IO_STATUS_BLOCK 구조체로 설정됩니다.
출력 버퍼 길이
OutputBufferLength 는 OutputBuffer에서 제공하는 출력 버퍼의 크기(바이트)를 제공합니다.
상태 블록
요청이 성공하면 IoStatusBlock-Status>가 STATUS_SUCCESS 설정되고, 그렇지 않으면 Status 멤버가 오류 코드로 설정됩니다. 출력 버퍼가 출력 버퍼 헤더를 포함할 만큼 충분히 크지 않으면 Status 멤버가 STATUS_BUFFER_TOO_SMALL 설정됩니다. 출력 버퍼가 출력 버퍼 헤더를 포함할 만큼 충분히 크지만 컨트롤 메서드의 모든 출력 인수를 포함할 만큼 크지 않은 경우 Status 멤버는 STATUS_BUFFER_OVERFLOW 설정되고 OutputBuffer-Length>는 출력 버퍼의 필요한 길이로 설정됩니다.
요청이 성공하면 IoStatusBlock-Information> 멤버가 출력 버퍼에 반환되는 바이트 수로 설정되고, 그렇지 않으면 정보 멤버가 0으로 설정됩니다.
설명
디바이스용 드라이버는 IOCTL_ACPI_EVAL_METHOD 사용하여 디바이스가 지원하는 제어 방법을 동기적으로 평가할 수 있습니다. 예를 들어 디바이스 이름이 ACPI 네임스페이스에서 'ABCD'이고 'ABCD' 디바이스가 '_FOO' 메서드를 지원하는 경우 이 IOCTL을 사용하여 'ABCD' 디바이스에 요청을 보내고 제어 메서드 이름 '_FOO'을 제공하여 제어 메서드 '_FOO'를 평가할 수 있습니다.
IOCTL_ACPI_EVAL_METHOD 다음과 같은 유형의 입력 버퍼 구조를 지원합니다.
ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER
ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING
ACPI_EVAL_INPUT_BUFFER_COMPLEX
컨트롤 메서드의 출력 인수는 OutBuffer 포인터에서 제공하는 가변 길이 ACPI_EVAL_OUTPUT_BUFFER 구조체에 반환됩니다. ACPI_EVAL_OUTPUT_BUFFER 각각 출력 인수를 반환하는 가변 길이 ACPI_METHOD_ARGUMENT 구조의 배열을 포함합니다.
제어 메서드를 동기적으로 평가하는 방법에 대한 자세한 내용은 ACPI 컨트롤 메서드 동기 평가를 참조하세요.
Windows Server 2008 및 Windows Vista부터 드라이버는 IOCTL_ACPI_EVAL_METHOD_EX 요청을 사용하여 디바이스의 직제 자식 개체가 아닌 컨트롤 메서드를 동기적으로 평가할 수도 있습니다.
Windows Server 2008 및 Windows Vista에서 비동기적으로 ACPI 제어 메서드를 평가하는 방법에 대한 자세한 내용은 IOCTL_ACPI_ASYNC_EVAL_METHOD 및 IOCTL_ACPI_ASYNC_EVAL_METHOD_EX 참조하세요.
IOCTL_ACPI_EVAL_METHOD IRQL < DISPATCH_LEVEL만 사용할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 이상 버전의 Windows. |
머리글 | acpiioct.h(Acpiioct.h 포함) |
추가 정보
ACPI_EVAL_INPUT_BUFFER_COMPLEX
ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER
ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING