|
|
#include <stdio.h>
#include <windows.h>
#include "chkdev.h"
#include <stdlib.h>
#include "resource.h"
#include "WbemCli.h"
extern enum Classes_Provided;
// nonstandard array size
#pragma warning(disable:4200)
#ifdef DLLENTRY
#define DllExport __declspec( dllexport )
#else
#define DllExport
#endif
// define flags
#define FLAGS_RUN_CHKDRV 0x00001
#define FLAGS_IGNORE_STORAGE 0x00002
#define STORAGE_BASE_KEY "STORAGE\\VOLUME\\"
//
// Error return codes
//
#define SUCCESS 0
#define COULD_NOT_OPEN_FILE 1 // get last error still should be valid from CreateFile
#define FILE_TOO_BIG 2 // greater than 4 gig
#define BAD_PARAMITER 3 // paramiter is wrong
#define MEMORY_ALLOCATION_ERROR 4
#define FILE_CHECK_FAILED 5
#define CREATE_HASH_ERROR 6
#define WRONG_VERSION 7
#define SOME_RANDOM_XCPT 8
#define NO_MATCH_FOUND 9
#define BADERROR ((0xE0 << 24) | (FACILITY_ITF << 16))
#define RETURN_COMRESULT(x) _HRESULT_TYPEDEF_(x ? (BADERROR | x) : x)
typedef struct tag_DeviceElement { CHAR NAME[_MAX_PATH]; CHAR HWID[_MAX_PATH]; CHAR DeviceID[_MAX_PATH]; ULONG ulProblem; ULONG ulStatus; ULONG dwHandle; CHAR INIFILE[_MAX_FNAME + _MAX_EXT +1]; UINT IsPresent; } DeviceElement;
typedef struct tag_BIOS_Version { CHAR BIOSString [100]; CHAR BIOSDate [100]; } BIOSVERSION;
typedef struct tag_InfoFileHeader { char FileVersionName[32]; DWORD FileVersion[4]; DWORD TimeStamp; } InfoFileHeader;
typedef struct tag_FileHash { CHAR FileName[_MAX_PATH]; DWORD ulHashSize; BYTE Hash[_MAX_PATH]; } FileHash;
typedef struct tag_FileListHeader { DWORD TAG; DWORD CountFiles; FileHash Files[]; } FileListHeader;
typedef struct tag_FileHeader { InfoFileHeader FileInfo; DWORD ThisFileSize; DWORD CountStructs; DWORD CountFiles; BIOSVERSION BiosVersion ; FileListHeader *pFileList; DeviceElement DeviceArray[]; } FileHeader;
#pragma warning(default:4200)
BOOL _cdecl logprintf(TCHAR *lpszFormat, ...); DWORD WINAPI ScanDeviceList(void *pVoid); DWORD WINAPI ScanFileList(void *pVoid); BOOL CompareDevice (InfnodeClass *pDevice, DeviceElement *pElement); BOOL CompareFiles(char *FileName, ULONG HashSize, PBYTE Hash); int ScanTreeHelper(DEVNODE hDevnode, DEVNODE hParent); DWORD WINAPI ScanDeviceList(void *pVoid); DWORD WINAPI ScanFileList(void *pVoid);
int CreateList(IWbemContext *pCtx , Classes_Provided eClasses); int WalkTree(void); int WalkTreeHelper(DEVNODE hDevnode, DEVNODE hParent); int WriteDeviceToBuffer(DeviceElement *pElement, CheckDevice *pDevice); int WriteFileListToBuffer(FileHash *pHash, FileNode *pFile); int ScanList (TCHAR *szFileName, UINT uFlags);
BOOL GetList (TCHAR **pErrorString);
BOOL IsExcludedDriver (TCHAR *DeviceID); BOOL IsExcludedClass (TCHAR *DeviceID);
BOOL WriteBiosDateAndVersion (BIOSVERSION *BVer); BOOL GetBiosDateAndVersion(BIOSVERSION *BVer);
// cmplist.cpp
BOOL CryptFile (ULONG key, WORD *buffer, ULONG size /* in bytes */); BOOL bVerifyVersion(DWORD *pVersion); BOOL MatchPCI_ID(PCHAR pHwid, DeviceElement *pElement, ULONG count); BOOL MatchUSB_ID(PCHAR pHwid, DeviceElement *pElement, ULONG count); BOOL MatchHID_ID(PCHAR pHwid, DeviceElement *pElement, ULONG count); BOOL MatchACPI_ID(PCHAR pHwid, DeviceElement *pElement, ULONG count); BOOL MatchXxx_ID(PCHAR pHwid, DeviceElement *pElement, ULONG count);
extern "C" BOOL DllExport WINAPI Chkdrv_IsFileAMatch (ULONG pFileHandle, char *lpszFileName); extern "C" BOOL DllExport WINAPI Chkdrv_IsHWIDAMatch (ULONG pFileHandle, char *lpszHWIDName); extern "C" DWORD DllExport WINAPI Chkdrv_CloseListFile (ULONG pFileHandle); extern "C" DWORD DllExport WINAPI Chkdrv_OpenListFile(char *szFileName); extern "C" ULONG DllExport WINAPI Chkdrv_CompareListFiles(ULONG handle1, ULONG handle2, TCHAR **LogFile, UINT *cbResult);
extern "C" DWORD DllExport WINAPI CreateEnvCheckFile (PCHAR lpszFileName, HWND hParent); extern "C" DWORD DllExport WINAPI ScanDevicesForChanges(PCHAR lpszFileName, CHAR **lppszResults, UINT *cbResults, DWORD dwFlags); extern "C" BOOL bIgnoreStorage;
BOOL ProgBoxStep(char *text); int WalkTreeDevnode(DEVNODE hDevnode, DEVNODE hParent); extern "C" INT_PTR WINAPI ProgBoxProcedure( HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
); extern HANDLE hMutex;
#ifdef DEBUG
#ifndef ASSERT
#define ASSERT(x) \
if (!x) _asm int 3;
//void *::operator new(SIZE_T size);
#endif
#else
#ifndef ASSERT
#define ASSERT(x)
#endif
#endif
|