私はカーネル空間でZwOpenProcess
を使ってシンボリックリンクをファイルとして開こうとしています。以下のコードを使用すると、XP-7ではすべてOKです。しかし、Windowsの8.1 ZwOpenProcess
使用すると、私はWinObj使用して、チェックを0xC000000D
カーネルのシンボリックリンクを開く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;
}
、0xC0000001
のように、別のNTSTATUSコードで失敗 - システムにおけるシンボリックリンクの存在を、コードはXP-7で正常に動作します。
私はまた、 - FILE_ANY_ACCESSへのアクセスを変更するためにトリンドする - 同じ結果。
一般的なコードは正しいですが、エラーコードはIOサブシステムではなくドライバを返すことができます。私はCEDRIVER60を作成するドライバを特定していません - ファイルパス、EAなどのような特別なパラメータを作成する必要があります。 FILE_ANY_ACCESSを使用すると、ここではIOサブシステムがエラーを返す必要があります。私はZwOpenProcessとsymlinkがここでどのように関係しているのか分かりません。 – RbMm