共用方式為


警告 C28131

DriverEntry 例程應該儲存自變數的複本,而不是指標,因為 I/O 管理員會釋放緩衝區

備註

驅動程式的 DriverEntry 例程正在儲存緩衝區指標的複本,而不是儲存緩衝區的複本。 由於當例程傳回時 DriverEntry 釋放緩衝區,因此緩衝區的指標很快就會無效。

程式代碼分析名稱:NOT_COPYING_NAME

範例

下列程式代碼會產生這個警告。 g_RP 屬於 型別 PUNICODE_STRING,這是數據類型 UNICODE_STRING的指標。 藉由儲存 PUNICODE_STRING RegistryPath,我們只會儲存數據的指標 UNICODE_STRING 。 這會在結尾 DriverEntry遺失。

PUNICODE_STRING g_RP;

NTSTATUS
DriverEntry(
    PDRIVER_OBJECT DriverObject,
    PUNICODE_STRING RegistryPath
    )
{
    g_RP = RegistryPath;
    return 0;
}

下列程式代碼會補救此問題。 g_RP 現在是 , UNICODE_STRING具有自己的緩衝區。 複製數據時,其會保存超過 傳回的 DriverEntry

UNICODE_STRING g_RP;

NTSTATUS
DriverEntry(
    PDRIVER_OBJECT DriverObject,
    PUNICODE_STRING RegistryPath
    )
{
    g_RP = CloneRegistryPath(RegistryPath);  // CloneRegistryPath is an example helper function that copies over the data.
    return 0;
}