共用方式為


KsAllocateObjectHeader 函式 (ks.h)

KsAllocateObjectHeader 函式會初始化必要的檔案內容標頭。

語法

KSDDKAPI NTSTATUS KsAllocateObjectHeader(
  [out]          KSOBJECT_HEADER        *Header,
  [in]           ULONG                  ItemsCount,
  [in, optional] PKSOBJECT_CREATE_ITEM  ItemsList,
  [in]           PIRP                   Irp,
  [in]           const KSDISPATCH_TABLE *Table
);

參數

[out] Header

指向呼叫端配置的位置,如果成功,則會將指標傳回初始化 KSOBJECT_HEADER

[in] ItemsCount

指定在 ItemsList 中建立專案的物件數目, 在配置標頭之後新增至對象標頭。 如果 ItemsList NULL,這個值應該是零。

[in, optional] ItemsList

選擇性地指定呼叫端配置的緩衝區指標,其中包含要加入至對象標頭的一系列 KSOBJECT_CREATE_ITEM 結構。 如果沒有物件建立專案,則必須將 設定為 NULL

[in] Irp

指向主要函式 IRP_MJ_CREATE的 IRP,其中包含完成對象標頭建立所需的資訊。

[in] Table

指向這個檔案物件的初始化分派數據表。

傳回值

KsAllocateObjectHeader 函式會傳回 STATUS_SUCCESS,如果沒有足夠的資源可供滿足要求,則傳回 STATUS_INSUFFICIENT_RESOURCESSTATUS_SUCCESS

言論

呼叫此例程之前,驅動程式必須配置 KSDISPATCH_TABLE 的系統駐地記憶體,並初始化分派數據表。 呼叫 KsFreeObjectHeader 之前,無法釋放此分派數據表的記憶體。

KsAllocateObjectHeader 配置 KSOBJECT_HEADER 結構的記憶體,並在 header 傳回標頭的指標。 驅動程式不得嘗試釋放記憶體本身,而是在完成需要此對象標頭的所有作業時呼叫 KsFreeObjectHeader

如果指定的裝置有子物件存在,則驅動程式必須先呼叫 KsAllocateObjectHeader,配置分頁或非分頁記憶體的緩衝區,以保留每個子物件的 KSOBJECT_CREATE_ITEM 結構。 例如:

/* Allocate a buffer for 4 subobjects for a given streaming device */
PKSOBJECT_CREATE_ITEM createBuffer ;
ULONG bufferSize  = (sizeof (KSOBJECT_CREATE_ITEM)) * 4 ;

createBuffer = (PKSOBJECT_CREATE_ITEM)
               ExAllocatePoolWithTag (PagedPool, bufferSize) ;

驅動程式必須等到呼叫 KsFreeDeviceHeader之後,才能釋放為子物件 KSOBJECT_CREATE_ITEM 清單配置的記憶體。 若無法這麼做,可能會導致錯誤檢查條件。

要求

要求 價值
目標平臺 普遍
標頭 ks.h (包括 Ks.h)
連結庫 Ks.lib
IRQL < DISPATCH_LEVEL

另請參閱

KSOBJECT_CREATE_ITEM

KsFreeDeviceHeader

KsFreeObjectHeader