摘要:遍历文件夹,得到所有文件获取文件夹下所有文件名输入文件夹路径所要获取的文件名后缀,如等文件名输出获取的文件名列表文件句柄文件信息关闭系统重定向查找指定路径查找指定路径是否查找失败是否因为权限不足,若不足,则提升权限进程句柄当前进程全权访问令
#include "stdafx.h" #include#include #include #include #include #include #include #define MY_NOT_CHECK 1; #define MY_CHECKED 0; using namespace std; int main(){ string path("c:Windowssystem32"), exd("exe"); vector files; void getFiles(string path, string exd, vector & files); getFiles(path, exd, files); sort(files); show(files); } /*遍历文件夹,得到所有exe文件*/ void getFiles(string path, string exd, vector & files) { /************************************************************************/ /* 获取文件夹下所有文件名 输入: path : 文件夹路径 exd : 所要获取的文件名后缀,如jpg、png等; 文件名, exd = "" 输出: files : 获取的文件名列表 */ /************************************************************************/ BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege); //文件句柄 HANDLE hFile = INVALID_HANDLE_VALUE,hExe = INVALID_HANDLE_VALUE; //文件信息 WIN32_FIND_DATA fileinfo,exeinfo; string pathName, exdName = "*"; PVOID OldValue = NULL; // 关闭系统重定向 if (Wow64DisableWow64FsRedirection(&OldValue)) { // 查找指定路径 hFile = FindFirstFile(pathName.assign(path).append(exdName).c_str(), &fileinfo); if (FALSE == Wow64RevertWow64FsRedirection(OldValue)) { return; } } // 查找指定路径 // hFile = FindFirstFile(pathName.assign(path).append(exdName).c_str(), &fileinfo); // 是否查找失败 if (hFile == INVALID_HANDLE_VALUE) { // 是否因为权限不足,若不足,则提升权限 if (GetLastError() == 5) { HANDLE hToken; BOOL bRet = OpenProcessToken( GetCurrentProcess(), // 进程句柄(当前进程) TOKEN_ALL_ACCESS, // 全权访问令牌 &hToken // 返回的参数 进程令牌句柄 (就是AdjustTokenPrivileges的第一个参数) ); // 获取进程的令牌句柄 if (bRet != TRUE) { cout << "获取令牌句柄失败!" << endl; return; } BOOL set = SetPrivilege(hToken, SE_DEBUG_NAME, TRUE); if (!set || GetLastError() != ERROR_SUCCESS) { // 设置权限失败 cout << "提升权限失败 error:" << GetLastError() << endl; cout << "此文件夹缺少权限访问: " << pathName.assign(path).append("").c_str() << endl; return; } // 权限设置成功,继续执行 hFile = FindFirstFile(pathName.assign(path).append(exdName).c_str(), &fileinfo); cout << "权限设置完成" << endl; cout << GetLastError()<