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.
Secure Digital (SD) kartlı bir cihaz sürücüsü açıldıktan ve SD veri yolu sürücüsüne bir arabirim başlattıktan sonra istek gönderebilir. İstek göndermenin iki yolu vardır: SdBusSubmitRequest rutiniyle senkron ve SdBusSubmitRequestAsync rutiniyle asenkron olarak. Bu yordamların her ikisi de SD veri yolu kitaplığı (sdbus.lib) tarafından dışarı aktarılır.
Zaman uyumlu istek yordamı iki parametre alır: arabirim bağlamı ve istek paketi.
Arayüz bağlamı
Cihaz sürücüsü, SdBusOpenInterfaceile bir SD arabirimi açtıktan sonra SDBUS_INTERFACE_STANDARD yapısının Bağlamı üyesinden arabirim bağlamını alır. Arabirimde bir yöntem çağırdığında sürücü, bu bağlam bilgilerini her zaman geçirmelidir.
İstek paketi
Cihaz sürücüsünün bir SDBUS_REQUEST_PACKET yapısı ayırması ve başlatması gerekir. Bu yapı istek işlevini ve isteğin diğer özelliklerini belirtir.
SdBusSubmitRequest eşzamanlı olduğundan STATUS_PENDING döndürmez. Cihaz sürücüsü, bu yordamı çağırdığında IRQL < DISPATCH_LEVEL seviyesinde çalışıyor olmalıdır.
Zaman uyumsuz istek yordamı şu beş parametreyi alır: arabirim bağlamı, istek paketi, IRP, tamamlama yordamına yönelik bir işaretçi ve tamamlama bağlamı.
Arayüz bağlamı
Bu parametre, eşzamanlı durumda kullanılan aynı adlı parametreyle aynıdır.
İstek paketi
Bu parametre, eşzamanlı durumda kullanılan aynı adlı parametreyle aynıdır.
IRP
Bu parametre, cihaz sürücüsünün ayırdığı bir IRP'yi veya sürücünün sürücü yığınında üzerinde bulunan sürücüden aldığı bir IRP'yi barındırıyor. IRP, istek için taşıyıcı olarak kullanılır.
Tamamlama yordamı
Bu parametre, IRP parametresinde sağlanan IRP için bir IoTamamlama rutini tutar.
Kullanıcı bağlamı
Bu parametre, sistemin tamamlama yordamı parametresinde belirtilen tamamlama yordamına geçirdiği kullanıcı bağlamı verilerine yönelik bir işaretçi tutar.
Cihaz sürücüsü, < rutinini çağırırken IRQL = DISPATCH_LEVEL'de çalışıyor olmalıdır. SdBusSubmitRequest, kendi IRP'sini tahsis eden ve SdBusSubmitRequestAsyncçağıran bir sarmalayıcıdır. Sürücü yazarı için kolaylık sağlanması amacıyla sunulmuştur.
Aşağıdaki bölümlerde, bir cihaz sürücüsünün iki asıl SD isteği kategorisinin her birini nasıl gönderdiğini gösteren kod örnekleri verilmiştir: Farklı isteklerin açıklaması için bkz. SD_REQUEST_FUNCTION.
Güvenli Dijital (SD) Mülk İstekleri
Güvenli Dijital (SD) kart sürücüleri, kart özelliklerini okumak veya ayarlamak için özellik isteklerini kullanır. Örneğin, bir SD kart sürücüsü, SD kartındaki yazma koruma anahtarının kilitli konumda olup olmadığını belirlemek için bir özelliği okuyabilir veya çok işlevli bir SDIO kartındaki belirli bir işlevin sürücüsü, veri yolu sürücüsünün yönettiği işleve atadığı numarayı isteyebilir.
Aşağıdaki kod örneği, çok işlevli bir karttaki bir işlev sürücüsünün işlev numarasını veri yolu sürücüsünden nasıl isteyebileceğini gösterir:
sdrp = ExAllocatePool(NonPagedPool,
sizeof(SDBUS_REQUEST_PACKET));
if (!sdrp) {
return STATUS_INSUFFICIENT_RESOURCES;
}
RtlZeroMemory(sdrp, sizeof(SDBUS_REQUEST_PACKET));
sdrp->RequestFunction = SDRF_GET_PROPERTY;
sdrp->Parameters.GetSetProperty.Property =
SDP_FUNCTION_NUMBER;
sdrp->Parameters.GetSetProperty.Buffer =
&pDevExt->FunctionNumber;
sdrp->Parameters.GetSetProperty.Length =
sizeof(pDevExt->FunctionNumber);
status = SdBusSubmitRequest (pDevExt->BusInterface.Context,sdrp);
ExFreePool(sdrp);
if (!NT_SUCCESS(status)) {
return status;
}
Bu kod örneğinde, bir cihaz sürücüsü SDBUS_REQUEST_PACKETbir SD veri yolu istek paketi başlatır ve bunu SdBusSubmitRequestiletir. Tam olarak başlatılan istek paketi aşağıdaki özelliklere sahiptir:
İstek Türü
Kod örneği, istek paketinin RequestFunction üyesinde bir SDRF_GET_PROPERTY isteğini belirtir ve bu, veri yolu sürücüsüne karttan bir özellik alması talimatını verir. SDRF_GET_PROPERTY isteğinin açıklaması için bkz. SD_REQUEST_FUNCTION.
Özelliği alınacak
Kod örneği, Parameters.GetSetProperty.Property istek paketinin üyesindeki SDP_FUNCTION_NUMBER özelliğini belirtir. Bu özellik, veri yolu sürücüsüne işlev numarası özelliğinin içeriğini almasını bildirir. SDP_FUNCTION_NUMBER özelliğinin açıklaması için bkz. SDBUS_PROPERTY.
Özellik İçeriği ve Uzunluğu
Kod örneği, bir işaretçiyi aygıt uzantısındaki bir arabelleğe koyar.
Parameters.GetSetProperty.Buffer istek paketinin üyesi. Otobüs şoförü işlev numarasını bu konumda depolar. Örnek kod ayrıca bu arabelleğin boyutunu istek paketinin Parameters.GetSetProperty.Length üyesinde depolar.
Güvenli Dijital (SD) Cihaz Komut İstekleri
Sürücüler, bir SD cihazına komut göndermek için Secure Digital (SD) kartı komut isteklerini kullanır. SD komutları için protokol Güvenli Dijital Kart belirtiminde tanımlanır. Sürücüler, cihazı başlatan IRP_MN_START_DEVICE IRP başarıyla tamamlandıktan sonra istedikleri zaman komut istekleri gönderebilir.
Bu bölüm iki kod örneği içerir: doğrudan G/Ç kullanarak SD kartın yazmaçlarından bir bayt veri okuyan bir komut isteği ve genişletilmiş G/Ç kullanarak SD karta daha büyük miktarda veri yazan bir cihaz komut isteği. İkinci bölümdeki açıklama birinci bölüme bağlıdır, bu nedenle okuyucuların ikinci bölümü incelemeden önce ilk bölümü incelemeleri gerekir: