BOOL ConvertVirtualStoreConf(void *execDirV, void *userDirV, void *virtualDirV) { #define FASTCOPY_INI_W L"FastCopy.ini" WCHAR buf[MAX_PATH]; WCHAR org_ini[MAX_PATH], usr_ini[MAX_PATH], vs_ini[MAX_PATH]; BOOL is_admin = TIsUserAnAdmin(); BOOL is_exists; MakePathV(usr_ini, userDirV, FASTCOPY_INI_W); MakePathV(org_ini, execDirV, FASTCOPY_INI_W); #ifdef _WIN64 ConvertToX86Dir(org_ini); #endif is_exists = GetFileAttributesV(usr_ini) != 0xffffffff; if (!is_exists) { CreateDirectoryV(userDirV, NULL); } if (virtualDirV && GetChar(virtualDirV, 0)) { MakePathV(vs_ini, virtualDirV, FASTCOPY_INI_W); if (GetFileAttributesV(vs_ini) != 0xffffffff) { if (!is_exists) { is_exists = ::CopyFileW(vs_ini, usr_ini, TRUE); } MakePathV(buf, userDirV, L"to_OldDir(VirtualStore).lnk"); SymLinkV(virtualDirV, buf); sprintfV(buf, L"%s.obsolete", vs_ini); MoveFileW(vs_ini, buf); if (GetFileAttributesV(vs_ini) != 0xffffffff) { DeleteFileV(vs_ini); } } } if ((is_admin || !is_exists) && GetFileAttributesV(org_ini) != 0xffffffff) { if (!is_exists) { is_exists = ::CopyFileW(org_ini, usr_ini, TRUE); } if (is_admin) { sprintfV(buf, L"%s.obsolete", org_ini); MoveFileW(org_ini, buf); if (GetFileAttributesV(org_ini) != 0xffffffff) { DeleteFileV(org_ini); } } } MakePathV(buf, userDirV, L"to_ExeDir.lnk"); // if (GetFileAttributesV(buf) == 0xffffffff) { SymLinkV(execDirV, buf); // } return TRUE; }
/* リンクファイル削除 */ BOOL DeleteLinkV(void *path) { WCHAR dir[MAX_PATH]; if (!DeleteFileV(path)) return FALSE; GetParentDirV(path, dir); ::SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATHV|SHCNF_FLUSH, dir, NULL); return TRUE; }