Aracılığıyla paylaş


IRP_MN_QUERY_ID

Veri yolu sürücülerinin alt cihazları (alt PPO'lar) için BusQueryDeviceID isteklerini işlemesi gerekir. Veri yolu sürücüleri alt cihazları için BusQueryHardwareIDs, BusQueryCompatibleIDs ve BusQueryInstanceID isteklerini işleyebilir.

Windows 7'den başlayarak, veri yolu sürücülerinin alt PPO'ları için BusQueryContainerID isteklerini de işlemesi gerekir.

Bu tanımlayıcılar (kimlikler) hakkında daha fazla bilgi için bkz. Cihaz Tanımlama Dizeleri.

Not: İşlev sürücüleri ve filtre sürücüleri bu IRP'i işlemez.

Değer

0x13

Ana Kod

IRP_MJ_PNP

Gönderildiğinde

Bir cihaz numaralandırıldığında PnP yöneticisi bu IRP'yi gönderir. Bir sürücü, cihazlarından birinin örnek kimliğini almak için bu IRP'yi gönderebilir.

PnP yöneticisi ve sürücüleri bu IRP'yi IRQL PASSIVE_LEVEL rastgele bir iş parçacığı bağlamında gönderir.

Giriş Parametreleri

IO_STACK_LOCATION yapısının Parameters.QueryId.IdType üyesi, istenen kimlik türlerini belirtir. BusQueryDeviceID, BusQueryHardwareIDs, BusQueryCompatibleIDs, BusQueryInstanceID ve BusQueryContainerID olası değerlerdir. Aşağıdaki kimlik türü ayrılmıştır: BusQueryDeviceSerialNumber.

Çıkış Parametreleri

G/Ç durum bloğunda döndürülür.

G/Ç Durum Bloğu

Sürücü , Irp-IoStatus.Status> değerini STATUS_SUCCESS veya uygun bir hata durumuna ayarlar.

Başarılı olduğunda, sürücü Irp-IoStatus.Information'ı> istenen bilgilere işaret eden bir WCHAR işaretçisine ayarlar. Hata oluştuğunda, sürücü Irp-IoStatus.Information> değerini sıfır olarak ayarlar.

Operasyon

Bir sürücü bu IRP'ye yanıt olarak kimlikleri döndürürse, disk belleği havuzundaki bir WCHAR yapısını kimlikleri içerecek şekilde ayırır. PnP yöneticisi, artık gerekli olmadığında yapıyı serbest bırakın.

Sürücü aşağıdakilerden birini döndürür:

  • BusQueryDeviceID, BusQueryInstanceID veya BusQueryContainerID isteğine yanıt olarak bir REG_SZ dizesi.

  • BusQueryHardwareIDs veya BusQueryCompatibleIDs isteğine yanıt olarak bir REG_MULTI_SZ dizesi.

Sürücü geçersiz karaktere sahip bir kimlik döndürürse sistem hata denetimi yapacaktır. Bu IRP için bir kimlikte aşağıdaki değerlere sahip karakterler geçersizdir:

  • 0x20 küçük veya buna eşit (' ')

  • 0x7F'den büyük

  • 0x2C eşit (',')

Bir sürücü, kimlikler için aşağıdaki uzunluk kısıtlamalarına uymalıdır:

  • Bir sürücünün bu IRP'de döndürdüğü her donanım kimliği veya uyumlu kimlik MAX_DEVICE_ID_LEN karakterden kısa olmalıdır. Bu sabit şu anda sdk\inc\cfgmgr32.h içinde tanımlandığı gibi 200 değerine sahiptir.

  • Bir sürücünün bu IRP'de döndürdüğü kapsayıcı kimliği genel olarak benzersiz bir tanımlayıcı (GUID) olarak biçimlendirilmeli ve null sonlandırıcıyı içeren MAX_GUID_STRING_LEN karakter olmalıdır.

  • Bir veri yolu sürücüsü alt cihazları için genel olarak benzersiz örnek kimlikleri sağlarsa (yani, sürücü DEVICE_CAPABILITIES ayarlar. Cihazlar için UniqueID), ardından cihaz kimliği ve örnek kimliği birleşimi (MAX_DEVICE_ID_LEN - 1) karakterden küçük olmalıdır. İşletim sistemi, yol ayırıcısı için ek karakter gerektirir.

  • Bir veri yolu sürücüsü alt cihazları için genel olarak benzersiz örnek kimlikleri sağlamazsa, cihaz kimliği ve örnek kimliği birleşimi küçük olmalıdır (MAX_DEVICE_ID_LEN - 28). Bu denklemin değeri şu anda 172'dir.

Veri yolu sürücüleri, cihaz numaralandırıldıktan hemen sonra bir alt cihaz için bu IRP'yi işlemeye hazır olmalıdır.

BusQueryDeviceID ve BusQueryInstanceID belirtme

BusQueryDeviceID ve BusQueryInstanceID için veri yolu sürücüsünün sağladığı değerler, işletim sisteminin bir cihazı bilgisayardaki diğer cihazlardan ayırt etmesine olanak tanır. İşletim sistemi, cihaz için kayıt defteri bilgilerini bulmak için IRP_MN_QUERY_ID IRP'de döndürülen cihaz kimliğini ve örnek kimliğini ve IRP_MN_QUERY_CAPABILITIES IRP'de döndürülen benzersiz kimlik alanını kullanır.

BusQueryDeviceID için, bir veri yolu sürücüsü cihazın cihaz kimliğini sağlar. Cihaz kimliği, mümkün olduğunda numaralandırıcının adını ve üreticiyi, cihazı, düzeltmeyi, paketleyiciyi ve paketlenmiş ürünü tanımlayan dizeleri içeren, mümkün olan en özel cihaz açıklamasını içermelidir. Örneğin, PCI veri yolu sürücüsü, yukarıda belirtilen beş öğenin tümünü kodlayarak PCI\VEN_xxxx&DEV_xxxx&SUBSYS_xxxxxxxx&REV_xx biçimindeki cihaz kimlikleriyle yanıt verir. Ancak, cihaz kimliği iki özdeş cihazı ayırt etmek için yeterli bilgi içermemelidir. Bu bilgiler örnek kimliğinde kodlanmalıdır.

BusQueryInstanceID için, veri yolu sürücüsü cihazın örnek kimliğini içeren bir dize sağlamalıdır. Windows ve veri yolu sürücüleri, bilgisayardaki iki özdeş cihazı ayırt etmek için örnek kimliğini diğer bilgilerle birlikte kullanır. Örnek kimliği tüm bilgisayar genelinde benzersizdir veya yalnızca cihazın üst veri yolu üzerinde benzersizdir.

Bir örnek kimliği yalnızca veri yolu üzerinde benzersizse, veri yolu sürücüsü BusQueryInstanceID için bu dizeyi belirtir, ancak aynı zamanda cihaz için IRP_MN_QUERY_CAPABILITIES isteğine yanıt olarak FALSEuniqueID değerini belirtir. UniqueIDFALSE ise, PnP yöneticisi cihazın üst öğesi hakkında bilgi ekleyerek örnek kimliğini geliştirir ve böylece kimliği bilgisayarda benzersiz hale getirir. Bu durumda veri yolu sürücüsü cihazlarının örnek kimliklerini genel olarak benzersiz hale getirmek için ek adımlar atmamalıdır; yalnızca uygun yetenek bilgilerini döndürür ve işletim sistemi bunu halleder.

Veri yolu sürücüsü, her alt cihaz için seri numarası gibi genel olarak benzersiz bir kimlik sağlayabiliyorsa, veri yolu sürücüsü BusQueryInstanceID için bu dizeleri belirtir ve her cihaz için IRP_MN_QUERY_CAPABILITIES isteğine yanıt olarak TRUE'nun UniqueID değerini belirtir.

BusQueryHardwareIDs ve BusQueryCompatibleID'leri Belirtme

BusQueryHardwareIDs ve BusQueryCompatibleIDs için veri yolu sürücüsünün sağladığı değerler, Windows'un veri yolunun alt cihazı için uygun sürücüleri bulmasını sağlar.

Bir veri yolu sürücüsü, bu isteklerin her birine cihazı açıklayan REG_MULTI_SZ bir kimlik listesiyle yanıt verir. Listeyi sonlandıran iki NULL karakter de dahil olmak üzere bir kimlik listesinin karakter cinsinden uzunluk üst sınırı REGSTR_VAL_MAX_HCID_LEN.

Birden fazla donanım kimliği ve/veya birden çok uyumlu kimlik döndürürken, bir veri yolu sürücüsünün cihaz için en iyi sürücü eşleşmesini seçmeyi kolaylaştırmak için kimlikleri en genele özgü sırayla listelemesi gerekir. Donanım kimlikleri listesindeki ilk giriş, cihazın en özel açıklamasıdır ve bu nedenle genellikle cihaz kimliğiyle aynıdır.

Windows, olası eşleşmeler için INF dosyalarında listelenen kimliklerle kimlikleri denetler. Windows önce donanım kimlikleri listesini, ardından uyumlu kimlik listesini tarar. Önceki girdiler, cihazın daha belirgin açıklamaları olarak, daha sonraki girdiler ise cihaz için daha genel (ve dolayısıyla daha az en uygun) eşleşme olarak değerlendirilir. Donanım kimlikleri listesinde eşleşme bulunmazsa, Windows uyumlu kimlikler listesine geçmeden önce kullanıcıdan yükleme medyası isteyebilir.

Tak Çalıştırküçük IP'lerini işlemeye yönelik genel kurallar için bkz. Tak çalıştır.

BusQueryContainerID'leri Belirtme

Windows 7'de bir veri yolu sürücüsü, busQueryContainerID için cihazın kapsayıcı kimliğini içeren bir dize sağlamalıdır. Kapsayıcı kimliği, işletim sisteminin tüm işlevsel cihazları tek bir çıkarılabilir fiziksel cihazdan gruplandırmasını sağlar. Örneğin, çıkarılabilir çok işlevli bir cihazdaki tüm işlevsel cihazlar aynı kapsayıcı kimliğine sahiptir. Birden çok kapsayıcıdaki birden çok diske yayılabilen ancak herhangi bir kapsayıcıya ait olmayan birim cihazı gibi özel durumlarda kapsayıcı kimliklerini raporlama hakkında daha fazla bilgi için bkz. Kapsayıcı Kimliklerine Genel Bakış.

Çıkarılabilir fiziksel cihaz, veri yolu sürücüsünün bir IRP_MN_QUERY_CAPABILITIES isteğine yanıt olarak TRUEÇıkarılabilir özelliğini belirttiği bir alt cihaz olarak tanımlanır. Çıkarılabilir değer hakkında daha fazla bilgi için bkz. DEVICE_CAPABILITIES.

Veri yolu sürücüsü, cihazın sağladığı veri yolu özgü benzersiz kimliği temel alan bir kapsayıcı kimliği oluşturur. Daha fazla bilgi için bkz. Kapsayıcı Kimliklerinin Nasıl Oluşturulduğu.

Aşağıdakilerden biri doğruysa sürücünün IRP isteğinde başarısız olması ve IoStatus.Status değerini STATUS_NOT_SUPPORTED olarak ayarlaması gerekir:

  • Cihaz, veri yolu sürücüsünün kapsayıcı kimliği oluşturmak için kullanabileceği veri yolu özgü benzersiz kimliği desteklemez.

  • Veri yolu sürücüsü daha önce cihaz için bir IRP_MN_QUERY_CAPABILITIES isteğine yanıt olarak FALSE'un Çıkarılabilir bir özelliğini belirtmişti.

Bu IRP Gönderiliyor

Genellikle bu IRP'yi yalnızca PnP yöneticisi gönderir.

Bir cihazın donanım kimliklerini veya uyumlu kimliklerini almak için bu IRP'yi göndermek yerine IoGetDeviceProperty'yi çağırın.

Bir sürücü, cihazlarından birinin örnek kimliğini almak için bu IRP'yi gönderebilir. Örneğin, işlevleri bağımsız olarak çalışmayan çok işlevli bir PnP ISA cihazı düşünün. PnP yöneticisi işlevleri ayrı cihazlar olarak numaralandırır, ancak bu tür bir cihazın sürücüsünün bir veya daha fazla işlevi ilişkilendirmesi gerekebilir. PnP ISA benzersiz bir örnek kimliği garanti ettiğinden, böyle çok işlevli bir cihazın sürücüsü aynı cihazda bulunan işlevleri bulmak için örnek kimliklerini kullanabilir. Böyle bir cihazın sürücüsü, cihazın PnP ISA cihazı olduğunu onaylamak için IoGetDeviceProperty'yi çağırarak cihazın numaralandırıcı adını da almalıdır.

IRP'leri gönderme hakkında bilgi için bkz. IRP'leri işleme. Aşağıdaki adımlar özellikle bu IRP için geçerlidir:

  • IRP'nin sonraki G/Ç yığını konumundaki değerleri ayarlayın: MajorFunction değerini IRP_MJ_PNP, MinorFunction değerini IRP_MN_QUERY_ID ve Parameters.QueryId.IdType değerini BusQueryInstanceID olarak ayarlayın.

  • IoStatus.Status değerini STATUS_NOT_SUPPORTED olarak ayarlayın.

Sorgu kimliği IRP'sini göndermeye ek olarak, sürücünün cihazın DevicePropertyEnumeratorName değerini almak için IoGetDeviceProperty'yi çağırması gerekir.

IRP tamamlandıktan ve sürücü kimlikle tamamlandıktan sonra, sürücünün sorgu IRP'sini işleyen sürücü(ler) tarafından döndürülen kimlik yapısını boşaltması gerekir.

Gereksinimler

Başlık

Wdm.h (Wdm.h, Ntddk.h veya Ntifs.h dahil)

Ayrıca bakınız

Cihaz Tanımlama Dizeleri

IoGetDeviceProperty