#ifndef _SCAN_H_ #define _SCAN_H_ #if SCAN_DEBUG extern BOOL scan_dprinton; #endif typedef struct _SMALL_WIN32_FIND_DATAW { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; WCHAR cAlternateFileName[ 14 ]; WCHAR cFileName[ 1 ]; } SMALL_WIN32_FIND_DATAW, *PSMALL_WIN32_FIND_DATAW, *LPSMALL_WIN32_FIND_DATAW; typedef VOID (* PSCAN_FREE_USER_DATA_CALLBACK) ( IN PVOID UserData ); typedef DWORD (* PSCAN_NEW_FILE_CALLBACK) ( IN PVOID Context, IN PWCH Path, IN PSMALL_WIN32_FIND_DATAW ExistingFileData OPTIONAL, IN PWIN32_FIND_DATAW NewFileData, IN PVOID *FileUserData, IN PVOID *ParentDirectoryUserData ); typedef DWORD (* PSCAN_NEW_DIRECTORY_CALLBACK) ( IN PVOID Context, IN PWCH Path, IN PSMALL_WIN32_FIND_DATAW ExistingDirectoryData OPTIONAL, IN PWIN32_FIND_DATAW NewDirectoryData, IN PVOID *DirectoryUserData, IN PVOID *ParentDirectoryUserData ); typedef DWORD (* PSCAN_CHECK_FILE_CALLBACK) ( IN PVOID Context, IN PWCH Path, IN PSMALL_WIN32_FIND_DATAW FileData, IN PVOID *FileUserData, IN PVOID *ParentDirectoryUserData ); typedef DWORD (* PSCAN_CHECK_DIRECTORY_CALLBACK) ( IN PVOID Context, IN PWCH Path, IN PSMALL_WIN32_FIND_DATAW DirectoryData, IN PVOID *DirectoryUserData, IN PVOID *ParentDirectoryUserData OPTIONAL ); typedef DWORD (* PSCAN_ENUM_FILE_CALLBACK) ( IN PVOID Context, IN PWCH Path, IN PSMALL_WIN32_FIND_DATAW FileData, IN PVOID *FileUserData, IN PVOID *ParentDirectoryUserData ); typedef DWORD (* PSCAN_ENUM_DIRECTORY_CALLBACK) ( IN PVOID Context, IN PWCH Path, IN PSMALL_WIN32_FIND_DATAW DirectoryData, IN PVOID *DirectoryUserData, IN PVOID *ParentDirectoryUserData OPTIONAL ); typedef BOOL (* PSCAN_RECURSE_DIRECTORY_CALLBACK) ( IN PVOID Context, IN PWCH Path, IN PSMALL_WIN32_FIND_DATAW DirectoryData, IN PVOID *DirectoryUserData, IN PVOID *ParentDirectoryUserData OPTIONAL ); DWORD ScanInitialize ( OUT PVOID *ScanHandle, IN BOOL Recurse, IN BOOL SkipRoot, IN PSCAN_FREE_USER_DATA_CALLBACK FreeUserDataCallback OPTIONAL ); DWORD ScanDirectory ( IN PVOID ScanHandle, IN PWCH ScanPath, IN PVOID Context OPTIONAL, IN PSCAN_NEW_DIRECTORY_CALLBACK NewDirectoryCallback OPTIONAL, IN PSCAN_CHECK_DIRECTORY_CALLBACK CheckDirectoryCallback OPTIONAL, IN PSCAN_RECURSE_DIRECTORY_CALLBACK RecurseDirectoryCallback OPTIONAL, IN PSCAN_NEW_FILE_CALLBACK NewFileCallback OPTIONAL, IN PSCAN_CHECK_FILE_CALLBACK CheckFileCallback OPTIONAL ); DWORD ScanEnumTree ( IN PVOID ScanHandle, IN PVOID Context, IN PSCAN_ENUM_DIRECTORY_CALLBACK EnumDirectoryCallback OPTIONAL, IN PSCAN_ENUM_FILE_CALLBACK EnumFileCallback OPTIONAL ); VOID ScanTerminate ( IN PVOID ScanHandle ); DWORD OpenAndMapFile ( IN PWCH FileName, IN DWORD DesiredAccess, OUT PHANDLE FileHandle, OUT PLARGE_INTEGER Size, OUT PHANDLE MappingHandle, OUT PVOID *MappedBase ); DWORD OpenAndMapFileA ( IN PSZ FileName, IN DWORD DesiredAccess, OUT PHANDLE FileHandle, OUT PLARGE_INTEGER Size, OUT PHANDLE MappingHandle, OUT PVOID *MappedBase ); VOID CloseMappedFile ( IN HANDLE FileHandle, IN HANDLE MappingHandle, IN PVOID MappedBase ); #define SCAN_FILETYPE_TEXT 0 #define SCAN_FILETYPE_UNICODE_TEXT 1 #define SCAN_FILETYPE_BINARY 2 #define SCAN_FILETYPE_MAYBE_BINARY 3 DWORD DataLooksBinary ( IN PVOID MappedBase, IN DWORD FileSize, OUT PUCHAR BinaryData OPTIONAL, OUT PDWORD BinaryDataOffset OPTIONAL ); DWORD FileLooksBinary ( IN PWCH DirectoryName, IN PWCH FileName, OUT PUCHAR BinaryData OPTIONAL, OUT PDWORD BinaryDataOffset OPTIONAL ); #endif // _SCAN_H_