Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bağdaştırıcı sürücüsü çekirdek modu sürücü hizmeti olarak yüklendiğinden, işletim sistemi bağdaştırıcı sürücüsünü sistem başlatma zamanında yükler ve sürücünün DriverEntry yordamını çağırır. DriverEntry yordamı iki parametre alır: sürücü nesnesi ve kayıt defteri yolu adı. DriverEntry , PortCls işlevini PcInitializeAdapterDriver'a driver-object ve registry-path name parametrelerinin yanı sıra bağdaştırıcı sürücüsünün AddDevice işlevinin işaretçisi olan üçüncü bir parametreyle çağırmalıdır.
Aşağıdaki örnekte, sürücünün DriverEntry işlevi, pcInitializeAdapterDriver yordamının üçüncü parametresi olarak sürücünün AddDevice işlevini gösteren işlev işaretçisini MyAddDevicegeçirir.
NTSTATUS
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
return PcInitializeAdapterDriver(DriverObject, RegistryPath, MyAddDevice);
}
PcInitializeAdapterDriver yordamı, sağlanan AddDevice yordamını sürücü nesnesinin sürücü uzantısına yükler ve PortCls sürücüsünün IRP işleyicilerini sürücü nesnesinin kendisine yükler.
Aşağıdaki kod, sürücü işlevinin örnek bir uygulamasıdır MyAddDevice .
#define MAX_MINIPORTS 6 // maximum number of miniports
NTSTATUS
MyAddDevice(
PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT PhysicalDeviceObject
)
{
return PcAddAdapterDevice(DriverObject, PhysicalDeviceObject, MyStartDevice,
MAX_MINIPORTS, 0);
}
Bu işlev, belirtilen bağdaştırıcı cihazını oluşturan, bir sürücüyü cihazla ilişkilendiren ve işletim sistemi cihazı başlattığında çağrılan bağdaştırıcı sürücüsünün MyStartDevice işlevine bir işaretçi depolayan PcAddAdapterDevice PortCls işlevini çağırır (bkz. Cihaz Başlatma).
PcAddAdapterDevice yordamı, işlevsel bir cihaz nesnesi (FDO) oluşturur ve bunu sistem tarafından sağlanan fiziksel cihaz nesnesi (PDO) ile ilişkilendirir. Yeni FDO, PortCls'in cihazla ilgili bağlam bilgilerini depolamak için kullandığı bir uzantıyla oluşturulur.
MyStartDevice işlev işaretçisini, MyAddDevice tarafından sağlanan bu bağlamda içerir.
İşletim sistemi cihaza atanacak kaynakları (kesintiler, DMA kanalları, G/Ç bağlantı noktası adresleri vb.) belirledikten sonra, cihaza başlatma isteği (IRP_MN_START_DEVICE) gönderir. Bu isteğe yanıt olarak, PortCls sürücüsündeki istek işleyicisi aşağıdaki örnek kodda gösterilen bağdaştırıcı sürücüsünün MyStartDevice işlevini çağırır:
NTSTATUS
MyStartDevice(
PDEVICE_OBJECT DeviceObject,
PIRP Irp,
PRESOURCELIST ResourceList
)
{
...
}
İstek işleyicisi cihaz nesnesine, IRP_MN_START_DEVICE isteğine ve kaynak listesine işaretçiler sağlar MyStartDevice (bkz. IResourceList). İşlev, MyStartDevice kaynak listesini başlatılması gereken her miniport sürücüsü için gereken kaynaklara böler. İşlev daha sonra her miniport sürücüsünü başlatır ve denetimi PortCls'e döndürür; bu da IRP'yi tamamlar ve denetimi işletim sistemine döndürür.
Sürücü başlangıç koduna daha fazla örnek için Microsoft Windows Sürücü Seti'ndeki (WDK) örnek ses bağdaştırıcısı sürücülerine bakın.