Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
C:> cl /W4 /EHsc Redirection.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
Redirection.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:Redirection.exe
Redirection.obj
Source:
#pragma comment(lib, "ole32")
#pragma comment(lib, "ShlWApi")
#pragma comment(lib, "Shell32")
#define _WIN32_WINNT 0x0600
#define UNICODE
#include <windows.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <iostream>
using std::wcout;
using std::endl;
class auto_free_com_memory {
public:
auto_free_com_memory(void * p) : m_p(p) {}
~auto_free_com_memory() {if (m_p) ::CoTaskMemFree(m_p);}
private:
void * m_p;
};
int wmain() {
wchar_t * folderPath = NULL;
if FAILED(SHGetKnownFolderPath(FOLDERID_ProgramFiles, KF_FLAG_CREATE, NULL , &folderPath)) {
wcout << L"Cannot retrieve FOLDERID_ProgramFiles known folder location." << endl;
return -1;
}
auto_free_com_memory _fp(folderPath);
// System drive root redirection
wchar_t systemDriveRoot[] = {folderPath[0], folderPath[1], folderPath[2], L'\0'};
WCHAR filePath[MAX_PATH];
if (wcscpy_s(filePath, systemDriveRoot) || !PathAppend(filePath, L"UAC Redirection test.log")) {
wcout << L"Could not build the path to a file under the system drive root folder." << endl;
return -2;
}
wcout << L"Creating \"" << filePath << L"\"." << endl;
HANDLE file = CreateFile(filePath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (file == INVALID_HANDLE_VALUE)
wcout << L"Could not create a file under the system drive root folder. (error " << GetLastError() << L")." << endl;
else
CloseHandle(file);
// Program Files redirection
if (wcscpy_s(filePath, folderPath) || !PathAppend(filePath, L"MyUACRedirection")) {
wcout << L"Could not build the path to a file under the Program File known folder." << endl;
return -3;
}
// Does the file folder exist?
DWORD folderAttributes = GetFileAttributes(filePath);
if (folderAttributes == INVALID_FILE_ATTRIBUTES || ! (folderAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
wcout << L"The folder \"" << filePath << L"\" must exist and be accessible for this test to work." << endl;
return -4;
}
if (!PathAppend(filePath, L"MyUACRedirection.log")) {
wcout << L"Unexpected error adding the file name to \"" << filePath << "\"."<< endl;
}
wcout << L"Creating \"" << filePath << "\"." << endl;
file = CreateFile(filePath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (file == INVALID_HANDLE_VALUE)
wcout << L"Could not create \"" << filePath << "\" (error " << GetLastError() << L")." << endl;
else
CloseHandle(file);
return 0;
}