Bagikan melalui


EVT_SERCX2_APPLY_CONFIG fungsi panggilan balik (sercx.h)

Fungsi panggilan balik peristiwa EvtSerCx2ApplyConfig dipanggil oleh versi 2 dari ekstensi kerangka kerja serial (SerCx2) untuk menyediakan driver pengontrol serial dengan daftar pengaturan konfigurasi khusus perangkat untuk diterapkan ke perangkat keras pengontrol serial.

Sintaks

EVT_SERCX2_APPLY_CONFIG EvtSercx2ApplyConfig;

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

Parameter

[in] Device

Handel WDFDEVICE ke objek perangkat kerangka kerja yang mewakili pengontrol serial. Driver pengontrol serial membuat objek ini dalam fungsi panggilan balik EvtDriverDeviceAdd . Untuk informasi selengkapnya, lihat SerCx2InitializeDevice.

[in] ConnectionParameters

Penunjuk ke struktur parameter koneksi. Fungsi ini harus mentransmisikan penunjuk ke jenis penunjuk yang sesuai, mengurai struktur data untuk mendapatkan pengaturan konfigurasi, dan menerapkan pengaturan ini ke perangkat keras pengontrol serial. Struktur parameter koneksi didefinisikan oleh vendor platform perangkat keras dan buram untuk SerCx2 dan sistem operasi. Untuk informasi selengkapnya, lihat Keterangan.

Nilai kembali

Fungsi EvtSerCx2ApplyConfig mengembalikan STATUS_SUCCESS jika panggilan berhasil. Jika tidak, kode status kesalahan akan ditampilkan.

Keterangan

Driver pengontrol serial Anda harus menerapkan fungsi ini. Driver mendaftarkan fungsi dalam panggilan ke metode SerCx2InitializeDevice yang menyelesaikan inisialisasi objek perangkat kerangka kerja untuk pengontrol serial.

SerCx2 memanggil fungsi EvtSerCx2ApplyConfig selama inisialisasi pengontrol serial untuk memastikan bahwa perangkat keras dalam keadaan awal yang valid. Selain itu, fungsi ini dipanggil setiap kali klien mengirim permintaan IOCTL_SERIAL_APPLY_DEFAULT_CONFIGURATION ke pengontrol serial.

SerCx2 mendapatkan parameter konfigurasi dari bidang data yang ditentukan vendor di deskriptor sumber daya ACPI untuk perangkat pengontrol serial. Format data yang digunakan firmware ACPI untuk menyimpan pengaturan konfigurasi ini harus sama dengan format data yang diharapkan oleh driver pengontrol serial. Untuk informasi selengkapnya, lihat deskripsi deskriptor koneksi bus serial UART dalam spesifikasi ACPI 5.0.

Ketika klien mengirim permintaan IOCTL_SERIAL_APPLY_DEFAULT_CONFIGURATION ke port serial yang dikelola oleh SerCx2, SerCx2 memanggil fungsi EvtSerCx2ApplyConfig untuk meneruskan parameter konfigurasi ke driver pengontrol serial. Setelah panggilan balik ini kembali, SerCx2 menyelesaikan permintaan dan menggunakan nilai pengembalian dari panggilan balik sebagai kode status untuk permintaan tersebut.

Contoh

Untuk menentukan fungsi panggilan balik EvtSerCx2ApplyConfig , Anda harus terlebih dahulu memberikan deklarasi fungsi yang mengidentifikasi jenis fungsi panggilan balik yang Anda tentukan. Windows menyediakan sekumpulan tipe fungsi panggilan balik untuk driver. Mendeklarasikan fungsi menggunakan jenis fungsi panggilan balik membantu Analisis Kode untuk Driver, Pemverifikasi Driver Statis (SDV), dan alat verifikasi lainnya menemukan kesalahan, dan itu adalah persyaratan untuk menulis driver untuk sistem operasi Windows.

Misalnya, untuk menentukan fungsi panggilan balik EvtSerCx2ApplyConfig yang diberi nama MyApplyConfig, gunakan jenis fungsi EVT_SERCX2_APPLY_CONFIG , seperti yang ditunjukkan dalam contoh kode ini:

EVT_SERCX2_APPLY_CONFIG  MyApplyConfig;

Kemudian, terapkan fungsi panggilan balik Anda sebagai berikut:

_Use_decl_annotations_
NTSTATUS
  MyApplyConfig(
    WDFDEVICE  Device,
    PVOID  ConnectionParameters
    )
  {...}

Jenis fungsi EVT_SERCX2_APPLY_CONFIG didefinisikan dalam file header Sercx.h. Untuk mengidentifikasi kesalahan secara lebih akurat saat Anda menjalankan alat analisis kode, pastikan untuk menambahkan anotasi Use_decl_annotations ke definisi fungsi Anda. Anotasi Use_decl_annotations memastikan bahwa anotasi yang diterapkan ke jenis fungsi EVT_SERCX2_APPLY_CONFIG dalam file header digunakan. Untuk informasi selengkapnya tentang persyaratan untuk deklarasi fungsi, lihat Mendeklarasikan Fungsi dengan Menggunakan Jenis Peran Fungsi untuk Driver KMDF. Untuk informasi selengkapnya tentang Use_decl_annotations, lihat Perilaku Fungsi Anotasi.

Contoh kode berikut menunjukkan implementasi parsial dari fungsi EvtSerCx2ApplyConfig untuk UART:

//
// Define the UART ACPI descriptor, plus any vendor-specific
// data that is needed by the serial controller (UART) driver.
//

#define ANYSIZE_ARRAY 1
#include <pshpack1.h>

//
// 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;

#include <poppack.h>

EVT_SERCX_APPLY_CONFIG MyApplyConfig;

//
// Implementation of an EvtSerCx2ApplyConfig callback function
//
_Use_decl_annotations_
VOID
  MyApplyConfig(
    WDFDEVICE Device,
    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 platform-specific configuration settings
        // from the UART descriptor here:
        ...
    }

    return status;
}

File header pshpack1.h dan poppack.h dalam contoh kode sebelumnya mengontrol mode perataan struktur yang digunakan oleh pengkompilasi. Jenis penunjuk PRH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER dan PPNP_SERIAL_BUS_DESCRIPTOR adalah penunjuk ke struktur RH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER dan PNP_SERIAL_BUS_DESCRIPTOR . Untuk informasi selengkapnya tentang anggota struktur PNP_UART_SERIAL_BUS_DESCRIPTOR , lihat Tabel 6-193 dalam spesifikasi ACPI 5.0.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia dimulai dengan Windows 8.1.
Target Platform Desktop
Header sercx.h
IRQL Dipanggil di PASSIVE_LEVEL.

Lihat juga

IOCTL_SERIAL_APPLY_DEFAULT_CONFIGURATION

PNP_SERIAL_BUS_DESCRIPTOR

RH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER

SerCx2InitializeDevice