Advertisement
yorath

enum dir with asd2fsm

Jan 20th, 2014
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.73 KB | None | 0 0
  1. NS_FSMLIB::IConnnector_Ptr co;
  2.  
  3. void enum_dir(std::wstring directory) {
  4.     const DWORD size = 0x1000;
  5.  
  6.     NS_FSMLIB::IFileOperation_Ptr fo;
  7.     fo.reset((NS_FSMLIB::IFileOperation *)CreateInstance(NS_FSMLIB::FileOperationInstance));
  8.  
  9.     HRESULT hr = fo->open(co, directory, FILE_READ_ATTRIBUTES,
  10.         FILE_ATTRIBUTE_NORMAL, NULL, FILE_OPEN);
  11.     if (FAILED(hr)) {
  12.         return;
  13.     }
  14.  
  15.     PFILE_BOTH_DIR_INFORMATION info = NULL;
  16.     PVOID Buffer = new UCHAR[size];
  17.     while ((hr = fo->enumerate(Buffer, size)) == S_OK) {
  18.         info = PFILE_BOTH_DIR_INFORMATION(Buffer);
  19.         while (true) {
  20.             std::wstring file_name(info->FileName, info->FileName + info->FileNameLength / sizeof(WCHAR));
  21.             if (file_name != L"." && file_name != L"..") {
  22.                 std::wstring path = directory + file_name;
  23.                 if (boost::filesystem::is_directory(path)) {
  24.                     path += L"\\";
  25.                     enum_dir(path);
  26.                 }
  27.                 LOG(INFO) << path;
  28.             }
  29.             if (info->NextEntryOffset == 0) {
  30.                 break;
  31.             }
  32.             info = PFILE_BOTH_DIR_INFORMATION(PBYTE(info) + info->NextEntryOffset);
  33.         }
  34.     }
  35.  
  36.     fo->close();
  37.  
  38.     delete []Buffer;
  39. }
  40.  
  41. int main(int argc, char *argv[]) {
  42.     //testing::InitGoogleTest(&argc, argv);
  43.     FLAGS_log_dir = "Log";
  44.     FLAGS_alsologtodbg = (IsDebuggerPresent() == TRUE);
  45.     google::InitGoogleLogging(argv[0]);
  46.     //RUN_ALL_TESTS();
  47.  
  48.  
  49.     co.reset((NS_FSMLIB::IConnector *)CreateInstance(NS_FSMLIB::ConnectorInstance));
  50.  
  51.     HRESULT hr = co->init();
  52.     if (FAILED(hr)) {
  53.         return 0;
  54.     }
  55.  
  56.     std::wstring dir = L"C:\\";
  57.     enum_dir(dir);
  58.  
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement