PREGISTER_EVENT_CALLBACK 콜백 함수(hdaudio.h)
RegisterEventCallback 루틴은 코덱 또는 코덱의 원치 않는 응답에 대한 콜백 루틴을 등록합니다.
RegisterEventCallback 루틴에 대한 함수 포인터 형식은 다음과 같이 정의됩니다.
통사론
PREGISTER_EVENT_CALLBACK PregisterEventCallback;
NTSTATUS PregisterEventCallback(
[in] PVOID _context,
[in] PHDAUDIO_UNSOLICITED_RESPONSE_CALLBACK Routine,
[in] PVOID Context,
[out] PUCHAR Tag
)
{...}
매개 변수
[in] _context
HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2또는 HDAUDIO_BUS_INTERFACE_BDL 구조체의 Context 멤버의 컨텍스트 값을 지정합니다.
[in] Routine
콜백 루틴에 대한 함수 포인터입니다. 이 매개 변수는 PHDAUDIO_UNSOLICITED_RESPONSE_CALLBACK 형식의 유효한 NULL이 아닌 함수 포인터여야 합니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
[in] Context
콜백 루틴에 대한 컨텍스트 값을 지정합니다. 호출자는 컨텍스트 값을 PVOID 형식으로 캐스팅합니다. 코덱이 지정된 태그를 포함하는 원치 않는 응답을 생성하면 HD Audio Bus 드라이버는 컨텍스트 값을 콜백 루틴에 호출 매개 변수로 전달합니다.
[out] Tag
원치 않는 응답을 식별하는 태그 값을 검색합니다. 이 매개 변수는 루틴이 태그 값을 쓰는 호출자 할당 UCHAR 변수를 가리킵니다. 호출자는 요청되지 않은 응답을 생성하기 위해 코덱 또는 코덱을 프로그래밍할 때 이 태그 값을 지정해야 합니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
반환 값
RegisterEventCallback 호출이 이벤트 등록에 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 루틴이 적절한 오류 코드를 반환합니다. 다음 표에서는 가능한 반환 상태 코드를 보여 줍니다.
반환 코드 | 묘사 |
---|---|
|
작업을 완료하는 데 사용할 수 있는 리소스가 충분하지 않음을 나타냅니다. |
발언
이 루틴은 코덱에서 원치 않는 응답에 대한 콜백 루틴을 등록합니다. 루틴은 태그를 출력하여 원치 않는 응답을 식별합니다. HD Audio Bus 드라이버가 태그 값이 일치하는 코덱에서 원치 않는 응답을 발견하면 루틴은 IRQL DISPATCH_LEVEL 지정된 콜백 루틴을 호출하고 지정된 컨텍스트 값을 호출 매개 변수로 루틴에 전달합니다.
registerEventCallback 호출한 후 함수 드라이버는 코덱 또는 코덱을 프로그래밍하여 지정된 태그를 사용하여 원치 않는 응답을 생성합니다.
루틴은 등록된 각 콜백 루틴에 고유한 태그를 할당합니다. 태그와 콜백 루틴 간의 고유한 연결은 콜백 루틴이 등록된 상태로 유지되는 한 유지됩니다. 함수 드라이버는 UnregisterEventCallback호출하여 콜백 루틴의 등록을 삭제할 수 있습니다.
현재 버스 드라이버는 코덱당 최대 64개의 고유 태그를 제공할 수 있습니다.
콜백 매개 변수는 함수 드라이버의 콜백 루틴에 대한 함수 포인터입니다. 콜백 루틴의 함수 포인터 형식은 다음과 같이 정의됩니다.
typedef VOID
(*PHDAUDIO_UNSOLICITED_RESPONSE_CALLBACK)
(HDAUDIO_CODEC_RESPONSE, PVOID);
첫 번째 호출 매개 변수는 명령에 대한 코덱의 응답을 지정하는 HDAUDIO_CODEC_RESPONSE 형식의 구조입니다. 이 구조체는 값으로 전달됩니다. 두 번째 호출 매개 변수는 callbackContext 값으로, 이전에 RegisterEventCallback 전달되었습니다. HD 오디오 버스 드라이버는 IRQL DISPATCH_LEVEL 콜백 루틴을 호출합니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 바탕 화면 |
헤더 | hdaudio.h(Hdaudio.h 포함) |
IRQL | PASSIVE_LEVEL(설명 섹션 참조) |