Windows 根據文件夾名稱後綴 .{CLSID} 判斷是否為特殊系統文件夾(回收站、控制面板等),並加載對應的 Shell 命名空間擴展顯示內容。
| 名稱 | CLSID |
|---|---|
| 回收站 | {645FF040-5081-101B-9F08-00AA002F954E} |
| 控制面板 | {21EC2020-3AEA-1069-A2DD-08002B30309D} |
| 計劃任務 | {D6277990-4C6A-11CF-8D87-00AA0060F5BF} |
| 字體資料夾 | {BD84B380-8CA2-1069-AB1D-08000948F534} |
| 網絡鄰居 | {208D2C60-3AEA-1069-A2D7-08002B30309D} |
更多請查註冊表 HKEY_CLASSES_ROOT\CLSID。
test。test.{645FF040-5081-101B-9F08-00AA002F954E}。cd "test.{...}" 仍可進入原文件夾(偽裝不影響真實路徑)。
#include
#include
#include
bool HideFolder(const char *path, const char *clsid) {
char newName[MAX_PATH];
snprintf(newName, MAX_PATH, "%s.%s", path, clsid);
return MoveFile(path, newName);
}
bool RestoreFolder(const char *path) {
char *dot = strrchr(path, '.');
if (!dot) return false;
*dot = '\0';
return MoveFile(path, path); // 實際需用原名
}
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int) {
/* 對話框資源包含:路徑編輯框、CLSID 下拉框、偽裝/還原/瀏覽/退出按鈕 */
DialogBox(hInst, MAKEINTRESOURCE(IDD_MAIN), NULL, MainProc);
return 0;
}
BOOL CALLBACK MainProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
switch (msg) {
case WM_INITDIALOG:
SendMessage(GetDlgItem(hwnd, IDC_CLSID), CB_ADDSTRING, 0, (LPARAM)"回收站");
SendMessage(GetDlgItem(hwnd, IDC_CLSID), CB_ADDSTRING, 1, (LPARAM)"控制面板");
/* ... 初始化下拉框 ... */
return TRUE;
case WM_COMMAND:
switch (LOWORD(wp)) {
case IDC_HIDE: // 偽裝
GetWindowText(GetDlgItem(hwnd, IDC_PATH), path, MAX_PATH);
int idx = SendMessage(GetDlgItem(hwnd, IDC_CLSID), CB_GETCURSEL, 0, 0);
HideFolder(path, clsidArray[idx]);
break;
case IDC_REC: // 還原
GetWindowText(GetDlgItem(hwnd, IDC_PATH), path, MAX_PATH);
RestoreFolder(path);
break;
case IDC_BROW: // 瀏覽選擇文件夾
BROWSEINFO bi = { hwnd, NULL, NULL, L"選擇文件夾", BIF_RETURNONLYFSDIRS };
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
if (pidl) { SHGetPathFromIDList(pidl, path); SetWindowText(GetDlgItem(hwnd, IDC_PATH), path); }
break;
case IDC_EXIT: EndDialog(hwnd, 0); break;
}
break;
case WM_CLOSE: EndDialog(hwnd, 0); break;
}
return FALSE;
}
dir /a 顯示真實名稱(含 CLSID 後綴)。僅供技術研究與防禦檢測,嚴禁用於惡意隱藏惡意代碼、竊取數據等非法用途。