共用方式為


SD 記憶卡要求

在安全數位 (SD) 卡設備磁碟機開啟並初始化 SD 匯流排驅動程式的介面之後,就可以提交要求。 有兩種方式可以提交要求:透過 SdBusSubmitRequest 常式以同步方式,並以非同步方式透過 SdBusSubmitRequestAsync 常式。 SD 匯流排程式庫會匯出這兩個常式, (sdbus.lib) 。

同步要求常式採用兩個參數:介面內容和要求封包。

介面內容
裝置驅動程式會在使用SdBusOpenInterface 開啟 SD介面之後,從SDBUS_INTERFACE_STANDARD結構的內容成員擷取介面內容。 每當驅動程式在 介面中呼叫 方法時,都必須在 中傳遞此內容資訊。

要求封包
設備磁碟機必須配置和初始化 SDBUS_REQUEST_PACKET 結構。 這個結構會指定要求函式和其他要求的特性。

因為 SdBusSubmitRequest 是同步的,所以不會傳回STATUS_PENDING。 當設備磁碟機呼叫此常式時,必須在 IRQL < DISPATCH_LEVEL執行。

非同步要求常式採用下列五個參數:介面內容、要求封包、IRP、完成常式的指標,以及完成內容。

介面內容
此參數與參數相同,且名稱與同步大小寫搭配使用。

要求封包
此參數與參數相同,且名稱與同步大小寫搭配使用。

Irp
此參數會保存設備磁碟機已配置的 IRP,或驅動程式從驅動程式堆疊中位於該驅動程式堆疊上方的驅動程式收到的 IRP。 IRP 會作為要求的電信業者使用。

完成常式
此參數會保存 IRP 參數中提供之 IRP 的 IoCompletion 常式。

使用者內容
此參數會保存系統傳遞至完成常式參數中指定的完成常式的使用者內容資料的指標。

裝置驅動程式必須在 IRQL < = DISPATCH_LEVEL呼叫 SdBusSubmitRequestAsync 常式時執行。 SdBusSubmitRequest 是一種包裝函式,可配置自己的 IRP,並呼叫 SdBusSubmitRequestAsync。 這是為了方便驅動程式寫入器而提供。

下列各節提供程式碼範例,說明設備磁碟機如何提交 SD 要求的兩個主要類別:如需不同要求的描述,請參閱 SD_REQUEST_FUNCTION

Secure Digital (SD) 屬性要求

安全數位 (SD) 卡片驅動程式會使用屬性要求來讀取或設定卡片屬性。 例如,SD 記憶卡驅動程式可能會讀取屬性,以判斷 SD 記憶卡上的寫入保護開關是否位於鎖定的位置,或是多函式 SDIO 記憶卡上特定函式的驅動程式可能會要求匯流排驅動程式指派給所管理函式的數位。

下列程式碼範例說明多函式卡片上的函式驅動程式如何向匯流排驅動程式要求其函式號碼:

 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;
 }

在此程式碼範例中,設備磁碟機會初始化 SD 匯流排要求封包、 SDBUS_REQUEST_PACKET,並將它傳遞至 SdBusSubmitRequest。 完整初始化的要求封包具有下列特性:

要求的類型
程式碼範例會在要求封包的 RequestFunction 成員中指定SDRF_GET_PROPERTY要求,以指示匯流排驅動程式從卡片擷取屬性。 如需SDRF_GET_PROPERTY要求的描述,請參閱 SD_REQUEST_FUNCTION

要擷取的屬性
程式碼範例會在要求封包的 Parameters.GetSetProperty.Property 成員中指定SDP_FUNCTION_NUMBER屬性,指示匯流排驅動程式擷取函式編號屬性的內容。 如需SDP_FUNCTION_NUMBER屬性的描述,請參閱 SDBUS_PROPERTY

屬性內容和長度
程式碼範例會將緩衝區的指標放在 中的裝置延伸模組中

要求封包的參數.GetSetProperty.Buffer成員。 匯流排驅動程式會將函式號碼儲存在此位置。 此範例程式碼也會將此緩衝區的大小儲存在要求封包的 Parameters.GetSetProperty.Length 成員中。

保護數位 (SD) 裝置命令要求

驅動程式會使用 Secure Digital (SD) 卡片命令要求,將命令傳送至 SD 裝置。 SD 命令的通訊協定定義于 安全數位卡 規格中。 驅動程式可以在啟動裝置的 IRP_MN_START_DEVICE IRP 順利完成之後,隨時傳送命令要求。

本節包含兩個程式碼範例:使用直接 I/O 從 SD 記憶卡暫存器讀取資料位元組的命令要求,以及使用擴充 I/O 將資料寫入 SD 記憶卡的裝置命令要求。 第二節中的說明取決於第一節,因此讀者應該先研究第一節,再研究第二節:

保護使用的數位要求

使用擴充 I/O 的安全數位要求