Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Istilah subdevice digunakan untuk menjelaskan pengikatan empat komponen yang tercantum dalam tabel berikut.
| Komponen | Deskripsi |
|---|---|
Objek miniport |
Objek yang mengekspos antarmuka driver miniport IMiniportXxx |
Objek port |
Objek yang mengekspos antarmuka IPortXxx driver port |
Objek daftar sumber daya |
Objek yang berisi daftar sumber daya driver adaptor yang ditetapkan ke subdevice |
Referensi string |
Nama yang ditambahkan ke nama jalur perangkat untuk menentukan subdevice selama pembuatan filter |
Antarmuka IMiniportXxx dan IPortXxx subdevice masing-masing mewarisi dari antarmuka dasar IMiniport dan IPort.
Driver sistem PortCls tidak membedakan antara driver port dan driver miniport. Ini hanya memerlukan objek, seperti objek port, dengan antarmuka yang dapat menangani permintaan yang dihasilkan sistem.
Demikian pula, PortCls tidak terlibat langsung dalam mengelola sumber daya. Hanya perlu mengikat penangan permintaan (driver port) ke daftar sumber daya. driver adaptor bertanggung jawab mengikat objek port, miniport, dan daftar sumber daya bersama-sama.
Contoh kode berikut menunjukkan bagaimana driver adaptor melakukan tindakan ini:
//
// Instantiate the port by calling a function supplied by PortCls.
//
PPORT port;
NTSTATUS ntStatus = PcNewPort(&port, PortClassId);
if (NT_SUCCESS(ntStatus))
{
PUNKNOWN miniport;
//
// Create the miniport object.
//
if (MiniportCreate) // a function to create a proprietary miniport
{
ntStatus = MiniportCreate(&miniport,
MiniportClassId, NULL, NonPagedPool);
}
else // Ask PortCls for one of its built-in miniports.
{
ntStatus = PcNewMiniport((PMINIPORT*)&miniport,
MiniportClassId);
}
if (NT_SUCCESS(ntStatus))
{
//
// Bind the port, miniport, and resources.
//
ntStatus = port->Init(DeviceObject,
Irp, miniport, UnknownAdapter, ResourceList);
if (NT_SUCCESS(ntStatus))
{
//
// Hand the port driver and the reference
// string to PortCls.
//
ntStatus = PcRegisterSubdevice(DeviceObject,
Name, port);
}
//
// We no longer need to reference the miniport driver.
// Either the port driver now references it,
// or binding failed and it should be deleted.
//
miniport->Release();
}
//
// Release the reference that existed when PcNewPort() gave us
// the pointer in the first place. This reference must be released
// regardless of whether the binding of the port and miniport
// drivers succeeded.
//
port->Release();
}
Untuk informasi tentang panggilan fungsi PortCls dalam contoh kode sebelumnya, lihat PcNewPort, PcNewMiniport, dan PcRegisterSubdevice.