共用方式為


EVT_SERCX_APPLY_CONFIG回呼函式 (sercx.h)

EvtSerCxApplyConfig 事件回呼函式會指示序列控制器驅動程式將組態設定清單套用至序列控制器硬體。

語法

EVT_SERCX_APPLY_CONFIG EvtSercxApplyConfig;

NTSTATUS EvtSercxApplyConfig(
  [in] WDFDEVICE Device,
  [in] PVOID ConnectionParameters
)
{...}

參數

[in] Device

代表序列控制器之架構裝置物件的WDFDEVICE句柄。

[in] ConnectionParameters

連接參數結構的指標。 此函式必須將此參數轉換成適當的指標類型、剖析數據結構以取得組態設定,並將這些設定套用至序列控制器硬體。 聯機參數結構是由硬體平臺廠商所定義,而且不透明地適用於序列架構延伸模組 (SerCx) 和操作系統。

傳回值

EvtSerCxApplyConfig 函式會在呼叫成功時傳回STATUS_SUCCESS。 否則,它會傳回適當的錯誤狀態代碼。

言論

SerCx 會在串行控制器初始化期間呼叫此函式,以確保硬體處於有效的初始狀態。 此外,每當用戶端傳送 IOCTL_SERIAL_APPLY_DEFAULT_CONFIGURATION I/O 控件要求給控制器時,就會呼叫此函式。

SerCx 會從序列控制器裝置的 ACPI 資源描述項取得這些組態參數。 ACPI 韌體用來儲存這些組態設定的數據格式應該與序列控制器驅動程式預期的數據格式相同。

當用戶端將 IOCTL_SERIAL_APPLY_DEFAULT_CONFIGURATION 要求傳送至 SerCx 所管理的序列埠時,SerCx 會判斷串行埠的序列控制器驅動程式是否支援 EvtSerCxApplyConfig 回呼,以及串行埠的 ACPI 資源描述元是否提供預設連線設定。 如果沒有,SerCx 會以錯誤狀態代碼STATUS_NOT_SUPPORTED完成要求。 否則,SerCx 會將連線參數傳遞至驅動程式的 EvtSerCxApplyConfig 回呼函式。 在此回呼傳回之後,SerCx 會完成要求,並使用回呼的傳回值作為要求的狀態代碼。

如果序列控制器驅動程式需要在 EvtSerCxApplyConfig 回呼期間取得默認連線參數,驅動程式可以呼叫 SerCxGetConnectionParameters 方法。

若要註冊 EvtSerCxApplyConfig 回呼函式,驅動程式必須呼叫 SerCxInitialize 方法。

例子

此回呼的函式類型會在 Sercx.h 中宣告,如下所示。

typedef NTSTATUS
  EVT_SERCX_APPLY_CONFIG(
    __in WDFDEVICE Device
    );

若要定義 EvtSerCxApplyConfig 名為 MyEvtSerCxApplyConfig的回呼函式,您必須先提供 靜態驅動程序驗證器 (SDV) 和其他驗證工具所需的函式宣告,如下所示。

EVT_SERCX_APPLY_CONFIG MyEvtSerCxApplyConfig;

然後,如下所示實作您的回呼函式。

NTSTATUS
  MyEvtSerCxApplyConfig(
    __in WDFDEVICE Device
    )
{ ... }

如需函數宣告之 SDV 需求的詳細資訊,請參閱 使用 KMDF 驅動程式的函式角色類型來宣告函式

下列程式代碼範例示範 UART EvtSerCxApplyConfig 函式的部分實作。
//
// Define the UART ACPI descriptor, plus any vendor-specific
// data that is needed by the serial controller (UART) driver.
//

#define ANYSIZE_ARRAY 1


//
// Common resource name descriptor
//
typedef struct _PNP_IO_DESCRIPTOR_RESOURCE_NAME {
    UCHAR ResourceIndex;
    UCHAR ResourceName[ANYSIZE_ARRAY];
} PNP_IO_DESCRIPTOR_RESOURCE_NAME, *PPNP_IO_DESCRIPTOR_RESOURCE_NAME;

//
// Bus descriptor for a UART
//
typedef struct _PNP_UART_SERIAL_BUS_DESCRIPTOR {
    PNP_SERIAL_BUS_DESCRIPTOR SerialBusDescriptor;
    ULONG BaudRate;
    USHORT RxBufferSize;
    USHORT TxBufferSize;
    UCHAR Parity;
    // Include any optional vendor data here:
    ...
    // Append the PNP_IO_DESCRIPTOR_RESOURCE_NAME here:
    ....
} PNP_UART_SERIAL_BUS_DESCRIPTOR, *PPNP_UART_SERIAL_BUS_DESCRIPTOR;

EVT_SERCX_APPLY_CONFIG UartEvtApplyConfig;

//
// Implementation of an EvtSerCxApplyConfig callback function
//
NTSTATUS
  UartEvtApplyConfig(
    __in WDFDEVICE Device,
    __in PVOID ConnectionParameters
    )
{
    NTSTATUS status = STATUS_SUCCESS; 
    PRH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER connection;
    PPNP_SERIAL_BUS_DESCRIPTOR descriptor;
    PPNP_UART_SERIAL_BUS_DESCRIPTOR uartDescriptor;

    if (ConnectionParameters == NULL)
    {
        status = STATUS_INVALID_PARAMETER; 
    }

    if (NT_SUCCESS(status))
    {
        connection = (PRH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER)ConnectionParameters;

        if (connection->PropertiesLength < sizeof(PNP_SERIAL_BUS_DESCRIPTOR))
        {
            status = STATUS_INVALID_PARAMETER;
        }
    }

    if (NT_SUCCESS(status))
    {
        descriptor = (PPNP_SERIAL_BUS_DESCRIPTOR)connection->ConnectionProperties;

        if (descriptor->SerialBusType != UART_SERIAL_BUS_TYPE)
        {
            status = STATUS_INVALID_PARAMETER;
        }
    }

    if (NT_SUCCESS(status))
    {
        uartDescriptor = (PPNP_UART_SERIAL_BUS_DESCRIPTOR)connection->ConnectionProperties; 

        // Apply the configuration settings from
        // the UART descriptor.
        ...
    }

    return status;
}

上述程式代碼範例中的PRH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER和PPNP_SERIAL_BUS_DESCRIPTOR指標類型定義於 Reshub.h 頭檔中。

要求

要求 價值
最低支援的用戶端 從 Windows 8 開始提供。
目標平臺 桌面
標頭 sercx.h
IRQL 在 IRQL <= DISPATCH_LEVEL 呼叫

另請參閱

IOCTL_SERIAL_APPLY_DEFAULT_CONFIGURATION

SerCxGetConnectionParameters

SerCxInitialize