ファイルが存在する場合、CreateFile で開いてそのファイルのハンドルを GetFinalPathNameByHandle に渡す。
そうすると、もしファイルが VirtualStore にリダイレクトされている場合は、VirtualStore のファイルパスが取得できる。
リダイレクトされていない場合は、普通にパスが取得できるからそれで判断する事ができる。
void FileAccessUAC(){
MessageBox(NULL, "LPLP", "EELE", MB_OK);
char FileName[] = "C:\\Windows\\TestFile.Txt"; //プロセスをわざと標準ユーザーにして
HANDLE OpenHandle = CreateFile(FileName,
GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (OpenHandle == INVALID_HANDLE_VALUE){
MessageBox(NULL, "ファイルのハンドルを作成できませんでした", "", MB_OK);
return;
}
char FinalName[512] = {};
char LPLP[512] = {};
DWORD dwRet = GetFinalPathNameByHandle(OpenHandle, FinalName, 512, FILE_NAME_OPENED);
char LPLP[512] = {};
sprintf_s(LPLP, "%s :: %d", FinalName,dwRet);
MessageBox(NULL, LPLP, "", MB_OK);
CloseHandle(OpenHandle);
}
検証に使用したC++ソースコード