2016-07-23 41 views
0

Ich versuche, symbolische Verbindung als Datei zu öffnen, die ZwOpenProcess im Kernelraum verwendet. Die Verwendung von Code unter allen ist in XP-7 in Ordnung. Aber mit Windows 8.1 ZwOpenProcess nicht mit unterschiedlichen NTSTATUS Codes, wie 0xC0000001, 0xC000000DÖffnen der symbolischen Verbindung im Kernel Windows8.1 +

OBJECT_ATTRIBUTES ObjectAttributes; 
HANDLE    FileHandle; 
IO_STATUS_BLOCK IoStatus; 
NTSTATUS   Status; 

InitializeObjectAttributes (&ObjectAttributes, 
          SymLinkOrDeviceName, // <--- \Device\CEDRIVER60 
          OBJ_KERNEL_HANDLE, 
          (HANDLE) NULL, 
          (PSECURITY_DESCRIPTOR) NULL); 

Status = ZwOpenFile (&FileHandle, 
         FILE_READ_ACCESS, 
         &ObjectAttributes, 
         &IoStatus, 
         0, 
         FILE_NON_DIRECTORY_FILE); 


if (!NT_SUCCESS (Status)) 
{ 
    DbgPrint("TEST: ERROR %p ", Status); // <--- 0xC0000001, 0xC000000D 
    goto Exit; 
} 

habe ich geprüft, mit WinObj - symbolische Verknüpfung im System vorhanden, arbeitet Code gut auf XP-7.

Ich trind auch zu ändern, Zugriff auf - FILE_ANY_ACCESS - das gleiche Ergebnis.

+0

im Allgemeinen Code ist korrekt, aber Fehlercode kann nicht IO Subsystem aber Treiber zurückgeben. Ich kenne keine speziellen Treiber, die CEDRIVER60 erstellen - möglicherweise erfordert es spezielle Parameter beim Erstellen (wie Dateipfad, EA, etc). Wenn Sie FILE_ANY_ACCESS verwenden - hier muss bereits IO subsytem einen Fehler an Sie zurückgeben. und ich verstehe nicht, wie ist ZwOpenProcess und Symlink hier verwandt ?? – RbMm

Antwort

0

ZwOpenProcess

Ich nehme an, Sie ZwOpenFile gemeint.

\ Device \ CEDRIVER60

Haben Sie wirklich in das \ Device Verzeichnis gesucht? Dieses Verzeichnis enthält normalerweise Geräteobjekte, die von Treibern erstellt wurden. Symbolische Links werden normalerweise in Verzeichnisse wie \ DosDevices eingefügt. Sie sollten auch das OBJ_CASE_INSENSITIVE-Flag einschließen.

FILE_READ_ACCESS

Dieses Flag legt fest, Zugriffsrecht (e) erforderlich, um erfolgreich eine IOCTL-Nachricht an eine Zielvorrichtung Objekt zu liefern. Geben Sie eine echte Dateizugriffsrechtskonstante wie FILE_READ_ATTRIBUTES, FILE_READ_DATA (ihr Wert entspricht eigentlich FILE_READ_ACCESS) oder GENERIC_READ an. MSDN-Seite auf ZwOpenFile (und ZwCreateFile) ist ebenfalls lesenswert. Möglicherweise müssen Sie auch das SYNCHRONIZE-Flag einschließen.

% p

NTSTATUS wird so lange (32-Bit-Ganzzahl mit Vorzeichen) definiert sind. % x ist geeigneter.

+0

im Allgemeinen all dies ist wahr, aber nicht erklären, konkreten Fehler. Wenn dieses Gerät nicht existiert, lautet der Fehler c0000034. schneller von all diesen Fehlercodes vom Treiber zurückgegeben, nicht von IO-Subsystem – RbMm

+0

@RbMm: Ich weiß, dass die Codes vom Treiber kommt. Ich kenne den Fahrer nicht. Vielleicht mag es die Zugriffsrechte FILE_READ_DATA einfach nicht oder führt einige andere Prüfungen durch, wenn das Paket IRP_MJ_CREATE empfangen wird. –

+0

ja, ich und nehme an, dass dies Fehlertreiber spezifisch ist, aber nicht von Windows IO-Subsystem. wirklich Fehler kann sein oder von IO-Subsystem oder Treibercode. Ich bin sicher, dass die zweite Variante – RbMm