Aracılığıyla paylaş


UMDF Sürücülerinde Cihaz Arabirimlerini Kullanma

Uyarı

UMDF 2, UMDF'nin en son sürümüdür ve UMDF 1'in yerini alır. Tüm yeni UMDF sürücüleri UMDF 2 kullanılarak yazılmalıdır. UMDF 1'e yeni özellik eklenmiyor ve Windows 10'un daha yeni sürümlerinde UMDF 1 desteği sınırlı. Evrensel Windows sürücüleri UMDF 2 kullanmalıdır.

Arşivlenen UMDF 1 örnekleri, Windows 11, sürüm 22H2 - Mayıs 2022 Sürücü Örnekleri Güncelleştirme'de bulunabilir.

Daha fazla bilgi için bkz. UMDF ile Çalışmaya Başlama.

Cihaz arabirimi, bir uygulamanın cihaza erişmek için kullanabileceği Tak Çalıştır (PnP) cihazına sembolik bir bağlantıdır. Kullanıcı modu uygulaması arabirimin sembolik bağlantı adını Microsoft Win32 CreateFile işlevi gibi bir API öğesine geçirebilir. Cihaz arabiriminin sembolik bağlantı adını almak için kullanıcı modu uygulaması SetupDi işlevlerini çağırabilir. SetupDi işlevleri hakkında daha fazla bilgi için bkz. SetupDi Cihaz Arabirimi İşlevleri.

Her cihaz arabirimi bir cihaz arabirimi sınıfına aittir. Örneğin, bir CD-ROM cihazı için sürücü yığını GUID_DEVINTERFACE_CDROM sınıfına ait bir arabirim sağlayabilir. CD-ROM cihazın sürücülerinden biri, sisteme ve uygulamalara bir CD-ROM cihazının kullanılabilir olduğunu bildirmek için GUID_DEVINTERFACE_CDROM sınıfının bir örneğini kaydeder. Cihaz arabirimi sınıfları hakkında daha fazla bilgi için bkz. Cihaz Arabirimlerine Giriş.

Cihaz Arayüzü Kaydetme

Bir cihaz arabirimi sınıfının örneğini kaydetmek için UMDF tabanlı bir sürücü, IDriverEntry::OnDeviceAdd geri çağırma işlevinin içinden IWDFDevice::CreateDeviceInterface öğesini çağırabilir. Sürücü arabiriminin birden çok örneğini destekliyorsa, her örneğe benzersiz bir başvuru dizesi atayabilir.

Aygıt Arabirimini Etkinleştirme ve Devre Dışı Bırakma

Oluşturma başarılı olursa, çerçeve cihazın PnP durumuna göre arabirimi otomatik olarak etkinleştirir ve devre dışı bırakır.

Ayrıca, bir sürücü gerektiğinde bir cihaz arabirimini devre dışı bırakabilir ve yeniden etkinleştirebilir. Örneğin, bir sürücü cihazının yanıt vermeyi durdurduğunu belirlerse, sürücü IWDFDevice::AssignDeviceInterfaceState çağrısı yaparak cihazın arabirimlerini devre dışı bırakabilir ve uygulamaların arabirime yeni tanıtıcılar almasını engelleyebilir. (Arabirimdeki mevcut tanıtıcılar etkilenmez.) Cihaz daha sonra kullanılabilir hale gelirse, sürücü arabirimleri yeniden etkinleştirmek için IWDFDevice::AssignDeviceInterfaceState öğesini yeniden çağırabilir.

Cihaz Arabirimine Erişim İsteklerinin Alınması

Uygulama bir sürücünün cihaz arabirimine erişim istediğinde, çerçeve sürücünün IQueueCallbackCreate::OnCreateFile geri çağırma işlevini çağırır. Sürücü, uygulamanın eriştiği cihazın veya dosyanın adını almak için IWDFFile::RetrieveFileName çağrısı yapabilir. Sürücü cihaz arabirimini kaydederken bir başvuru dizesi belirttiyse, işletim sistemi IWDFFile::RetrieveFileName'in döndürdüğü dosya veya cihaz adına başvuru dizesini içerir.

Cihaz Olayları Oluşturma

UMDF tabanlı sürücünüz, IWDFDevice::P ostEvent çağrısı yaparak cihaza özgü özel olaylar (cihaz olayları olarak adlandırılır) oluşturabilir. Cihazın arabirimlerinden herhangi birini kullanmak üzere kaydolan bir sürücü, bir cihazın özel olaylarının bildirimlerini alabilir. UMDF tabanlı sürücüler, IRemoteInterfaceCallbackEvent::OnRemoteInterfaceEvent geri çağırma işlevi sağlayarak bu tür bildirimleri alır.

Özel olaylar cihaza özeldir. Hem olayı oluşturan sürücünün geliştiricisi hem de olayı alan sürücünün geliştiricisi olayın anlamını anlamalıdır.

Başka Bir Sürücünün Cihaz Arabirimine Erişme

UMDF tabanlı sürücünüzün başka bir sürücünün sağladığı bir cihaz arabirimine G/Ç istekleri göndermesini istiyorsanız, cihaz arabirimini temsil eden bir uzak G/Ç hedefi oluşturabilirsiniz.

İlk olarak, bir cihaz arabirimi kullanılabilir olduğunda sürücünüzün bildirim almak için kaydolması gerekir. Aşağıdaki adımları kullanın:

  1. Sürücünüz IWDFDriver::CreateDevice'i çağırdığında, sürücü bir IPnpCallbackRemoteInterfaceNotification arabirimi sağlayabilir. Bu arayüzdeki IPnpCallbackRemoteInterfaceNotification::OnRemoteInterfaceArrival callback fonksiyonu, cihaz arayüzleri erişilebilir olduğunda sürücünüzü bilgilendirir.

  2. Sürücünüz IWDFDriver::CreateDevice çağrısı yaptıktan sonra, sürücünün kullanacağı her cihaz arabirimi için IWDFDevice2::RegisterRemoteInterfaceNotification çağrısını yapabilir.

Daha sonra çerçeve, belirtilen bir cihaz arabirimi kullanılabilir olduğunda sürücünün IPnpCallbackRemoteInterfaceNotification::OnRemoteInterfaceArrival geri çağırma işlevini çağırır. Geri çağırma işlevi, hangi cihaz arabiriminin geldiğini belirlemek için IWDFRemoteInterfaceInitialize::GetInterfaceGuid ve IWDFRemoteInterfaceInitialize::RetrieveSymbolicLink çağrısı yapabilir.

Sürücünüzün IPnpCallbackRemoteInterfaceNotification::OnRemoteInterfaceArrival geri çağırma işlevi genellikle aşağıdakileri yapmalıdır:

  1. İsteğe bağlı olarak IRemoteInterfaceCallbackEvent ve IRemoteInterfaceCallbackRemoval arabirimleri sağlayan bir uzak arabirim nesnesi oluşturmak için IWDFDevice2::CreateRemoteInterface çağrısı yapın.

  2. IWDFDevice2::CreateRemoteTarget çağrısı yaparak isteğe bağlı olarak bir IRemoteTargetCallbackRemoval arabirimi sağlayarak uzak bir hedef nesnesi oluşturun.

  3. Cihaz arabirimini uzak hedefe bağlamak için IWDFRemoteTarget::OpenRemoteInterface çağrısı yapın.

    Cihaz arabirimi, SWENUM yazılım cihazı numaralandırıcısının oluşturduğu arabirimse, sürücünüzün bir iş öğesinden OpenRemoteInterface çağrısı yapması gerekir. (Örneğin, Windows SDK'sında QueueUserWorkItem işlevine bakın.)

Artık sürücü G/Ç isteklerini biçimlendirebilir ve uzak G/Ç hedefine gönderebilir.

IPnpCallbackRemoteInterfaceNotification::OnRemoteInterfaceArrival geri çağırma işlevine ek olarak, UMDF tabanlı bir sürücü cihaz arabirimi olaylarının bildirimlerini almak için iki ek geri çağırma işlevi sağlayabilir: