windows - hvorfor IoCreateSymbolicLink () mislykkes med fejl 0xC000003A

Indlæg af Hanne Mølgaard Plasc

Problem



#include <ntddk.h>
#include <wdmsec.h>

#define control\_device\_object\_symbol L"\?\cdosym\_ssdt"

const GUID ssdt\_hook\_uuid = { 0xd47bf014L,0x7b37,0x11e7,{0xba,0x6f,0x00,0x0c,0x29,0xf3,0x4e,0xca} };
PDEVICE\_OBJECT gdo = NULL;//for IoCreateDeviceSecure use<global device object>
ULONG g\_index = 0;

NTSTATUS DriverEntry(PDRIVER\_OBJECT driver, PUNICODE\_STRING regPath)
{
    DbgBreakPoint();
    NTSTATUS status;
    ULONG i;
    ULONG index;

    UNICODE\_STRING sddl = RTL\_CONSTANT\_STRING(L"D:P(A;;GA;;;WD)");
    UNICODE\_STRING control\_device\_object = RTL\_CONSTANT\_STRING(L"\Device\cdo\_ssdt");
    UNICODE\_STRING control\_device\_symbol = RTL\_CONSTANT\_STRING(control\_device\_object\_symbol);

    status = IoCreateDeviceSecure(driver, 0, &control\_device\_object, FILE\_DEVICE\_UNKNOWN, FILE\_DEVICE\_SECURE\_OPEN, FALSE, &sddl, (LPCGUID)&ssdt\_hook\_uuid, &gdo);
    if (!NT\_SUCCESS(status))
    {
        DbgPrint("    [-] IoCreateDeviceSecure error.
");
        return status;
    }

    status = IoDeleteSymbolicLink(&control\_device\_symbol);
    status = IoCreateSymbolicLink(&control\_device\_symbol, &control\_device\_object);
    if (!NT\_SUCCESS(status))
    {
        DbgPrint("    [-] IoCreateSymbolicLink error while status=0x\%X.
",status);
        IoDeleteDevice(gdo);
        return status;
    }
}


Her er dele af koden.


Hver gang jeg debugger det i windbg, blev status sat til 0xC000003A efter IoCreateSymbolicLink (hvilket betyder, at stien ikke blev fundet).


Jeg har tjekket IoCreateDeviceSecure () og IoDeleteSymbolicLink () s returværdi, de er STATUS\_SUCCESS)


Da jeg sletter det symbolske navn, før jeg opretter den samme, hvorfor fortæller kernen mig stadig en vej, der ikke blev fundet?


Forresten refererer 'stien' til den symbolske navnebane eller andre?


Tak for enhver hjælp :)

Bedste reference