2008 07 08 01 11 NTFS junction file


因為不想同樣存兩份檔案,
想到sysinternals有出一個tool,
是用來在NTFS file system去產生symboly link,
因此就把它來做symboly link。
卻發現一般的explorer卻把這個檔案當成是目錄,
也因此無法開啟它。

但是也很神奇的發現,
有程式是可以正確的開啟 junction file,
那就是 usbhostfs_pc.exe 。
如果知道這隻程式是做什麼事的最好,
不知道也沒關係。

後來才發現原來junction file,
似乎是call win32 API的都無法打開。

而我自己在kernel是可以打開這個檔案。
範例如下:

{
NTSTATUS ntStatus = STATUS_SUCCESS;
IO_STATUS_BLOCK IoStatusBlock = {0};
UNICODE_STRING szPath = {0};
OBJECT_ATTRIBUTES Attr = {0};
HANDLE hBeep = 0;

RtlInitUnicodeString(&szPath, L"\\??\\D:\\test\\junction_file");
InitializeObjectAttributes(&Attr, &szPath, 0, NULL, NULL);

ntStatus = ZwCreateFile(&hBeep, GENERIC_READ, &Attr,
&IoStatusBlock, NULL, 0, FILE_SHARE_READ,
FILE_OPEN, 0, NULL, 0);

if (hBeep != NULL)
{
DbgPrint("Open Successfully\n");
ZwClose(hBeep);
}
}