You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.9 KiB
75 lines
1.9 KiB
|
|
struct PER_USER_PATH
|
|
{
|
|
LPWSTR wszFile;
|
|
LPWSTR wszPerUserFile;
|
|
LPSTR szFile;
|
|
LPSTR szPerUserFile;
|
|
DWORD cFileLen; // Length of the file name in symbols
|
|
BOOL bInitANSIFailed; // Indicates that path name is not
|
|
// translatable to ANSI
|
|
BOOL bWildCardUsed; // TRUE if file name has * in it.
|
|
LPSTR szPerUserDir; // Per-user directory for a file
|
|
LPWSTR wszPerUserDir; // Per-user directory for a file
|
|
DWORD cPerUserDirLen;
|
|
|
|
PER_USER_PATH():
|
|
wszFile(NULL), wszPerUserDir(NULL),
|
|
szFile(NULL), szPerUserDir(NULL), cFileLen(0),
|
|
bInitANSIFailed(FALSE), bWildCardUsed(FALSE),
|
|
wszPerUserFile(NULL), szPerUserFile(NULL),
|
|
cPerUserDirLen(0)
|
|
{
|
|
}
|
|
|
|
~PER_USER_PATH()
|
|
{
|
|
if (wszFile) {
|
|
LocalFree(wszFile);
|
|
}
|
|
|
|
if (wszPerUserDir) {
|
|
LocalFree(wszPerUserDir);
|
|
}
|
|
|
|
if (szFile) {
|
|
LocalFree(szFile);
|
|
}
|
|
|
|
if (szPerUserDir) {
|
|
LocalFree(szPerUserDir);
|
|
}
|
|
|
|
if (szPerUserFile) {
|
|
LocalFree(szPerUserFile);
|
|
}
|
|
|
|
if (wszPerUserFile) {
|
|
LocalFree(wszPerUserFile);
|
|
}
|
|
|
|
}
|
|
|
|
DWORD Init(IN HKEY hKey, IN DWORD dwIndex);
|
|
LPCSTR PathForFileA(IN LPCSTR szInFile, IN DWORD dwInLen);
|
|
LPCWSTR PathForFileW(IN LPCWSTR wszInFile, IN DWORD dwInLen);
|
|
private:
|
|
BOOL InitANSI();
|
|
};
|
|
|
|
class CPerUserPaths
|
|
{
|
|
private:
|
|
PER_USER_PATH* m_pPaths;
|
|
DWORD m_cPaths;
|
|
public:
|
|
CPerUserPaths();
|
|
~CPerUserPaths();
|
|
|
|
BOOL Init();
|
|
LPCSTR GetPerUserPathA(IN LPCSTR lpFileName);
|
|
LPCWSTR GetPerUserPathW(IN LPCWSTR lpFileName);
|
|
private:
|
|
BOOL IsAppCompatOn();
|
|
};
|
|
|