windows-nt/Source/XPSP1/NT/drivers/video/ms/test/vchk/ilimpchk.cpp

167 lines
3.8 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
#include "stdafx.h"
#include <io.h>
#include "vchk.h"
#include "ilimpchk.h"
#include "pefile.h"
#define NAMES_LIST_BUFSIZE (1024)
#define TMP_BUFFERS (1024)
char ImportSectionNames [NAMES_LIST_BUFSIZE];
// char AllowedImportDLLsNames [NAMES_LIST_BUFSIZE];
// extern AllowedAndIllegals allowx;
Names Modules = { NULL, 0 };
LPSTR FoundSectionName = NULL;
LPVOID FileData = NULL;
BOOL
InitIllegalImportsSearch (LPCSTR FileName, LPCSTR SectionNames/*, AllowedAndIllegals& allowx*/)
/*
SectionNames - possible names of import sections, despite .idata
AllowedImportDLLs - DLLs, which are allowed to be among importers
*/
{
int ofs = 0;
int fno = 0;
size_t flen = 0;
FILE* fp = fopen (FileName,"rb");
if (!fp)
return FALSE;
fno = _fileno( fp );
flen = (size_t)_filelength (fno);
if (flen<=0)
return FALSE;
if (FileData)
free (FileData);
FileData = malloc (flen);
if (!FileData)
return FALSE;
if (fread (FileData, 1, flen, fp) != flen)
return FALSE;
fclose (fp);
ofs = 0;
if (SectionNames) {
LPCSTR SecName;
for (SecName = SectionNames; *SecName; SecName++, ofs++) {
strcpy (ImportSectionNames+ofs, SecName);
ofs += strlen (SecName);
SecName += strlen (SecName);
}
*(ImportSectionNames+ofs) = 0;
}
else {
ImportSectionNames[0] = 0;
ImportSectionNames[1] = 0;
}
ofs=0;
/*
if (AllowedImportDLLs) {
LPCSTR DllName;
for (DllName = AllowedImportDLLs; *DllName; DllName++, ofs++) {
strcpy (AllowedImportDLLsNames+ofs, DllName);
ofs += strlen (DllName);
DllName += strlen (DllName);
}
*(AllowedImportDLLsNames+ofs) = 0;
}
else {
AllowedImportDLLsNames[0] = 0;
AllowedImportDLLsNames[1] = 0;
}
*/
Modules.Ptr = NULL;
Modules.Num = 0;
return TRUE;
}
LPSTR GetNextName(LPSTR NamePtr)
{
if (!NamePtr || !*NamePtr)
return NULL;
NamePtr += (strlen (NamePtr) + 1);
if (*NamePtr)
return NamePtr;
return NULL;
}
/*
BOOL
IsAllowedModuleName (LPCSTR ModuleName)
{
LPCSTR AllowedName;
for (AllowedName = AllowedImportDLLsNames;
*AllowedName;
AllowedName += (strlen(AllowedName)+1)) {
if (!strcmp (AllowedName, ModuleName))
return TRUE;
}
return FALSE;
}
*/
void
FreeName (Names name)
{
HeapFree (GetProcessHeap(), 0, name.Ptr);
}
Names
CheckSectionsForImports (void)
/*
Returns buffer with the names of import sections.
This memory is been freed during FinilizeIllegalImportsSearch,
one need not free it manually.
*/
{
char* SectionName;
Modules.Num = GetImportModuleNames (FileData, ".idata", &Modules.Ptr);
if (Modules.Num <= 0) {
for (SectionName = ImportSectionNames; *SectionName; SectionName++) {
Modules.Num = GetImportModuleNames (FileData, SectionName, &Modules.Ptr);
if (Modules.Num > 0) {
FoundSectionName = SectionName;
break;
}
SectionName += strlen (SectionName);
}
}
return Modules;
}
Names GetImportsList (LPCSTR ModuleName)
/*
Returns buffer with the names of import functions for ModuleName.
This memory is been freed during FinilizeIllegalImportsSearch,
one need not free it manually.
*/
{
Names Imports = {NULL, 0};
Imports.Num = GetImportFunctionNamesByModule (FileData,
FoundSectionName,
(char*)ModuleName,
&Imports.Ptr);
return Imports;
}
void
FinilizeIllegalImportsSearch (void)
/*
Frees temporarily allocated memory.
*/
{
}