|
|
#include "wudetect.h"
///////////////////////////////////////////////////////////////////////////////////////////
//
// Function IsThisFileDomesticOnly
//-----------------------------------------------------------------------------------------
//
// Return Value --- TRUE if the specified file is for domestic only
// Parameter
// LPTSTR lpFileName --- [IN] filename of the file needed to be examined
///////////////////////////////////////////////////////////////////////////////////////////
//
// Modified by RogerJ, 03/08/00
// Original Creator Unknown
// Modification --- UNICODE and Win64 ready, other minor modifications
//
///////////////////////////////////////////////////////////////////////////////////////////
bool IsThisFileDomesticOnly(LPTSTR lpFileName) { // string constants have been modified to lower case only to save run time conversion
TCHAR DomesticTag1[] = TEXT(/*"US/Canada Only, Not for Export"*/"us/canada only, not for export"); TCHAR DomesticTag2[] = TEXT(/*"Domestic Use Only"*/"domestic use only"); TCHAR DomesticTag3[] = TEXT(/*"US and Canada Use Only"*/"us and canada use only"); TCHAR Description1[ MAX_PATH ]; DWORD DefLang = 0x04b00409; DWORD dwLen; PVOID VersionBlock; UINT DataLength; DWORD dwHandle; LPTSTR Description; TCHAR ValueTag[ MAX_PATH ]; PDWORD pdwTranslation; UINT uLen; bool fDomestic = false; if ((dwLen = GetFileVersionInfoSize((LPTSTR)lpFileName, &dwHandle)) != 0 ) { if ((VersionBlock = malloc(dwLen)) != NULL ) { if (GetFileVersionInfo((LPTSTR)lpFileName, dwHandle, dwLen, VersionBlock)) { if (!VerQueryValue(VersionBlock, TEXT("\\VarFileInfo\\Translation"), (void **)&pdwTranslation, &uLen)) { pdwTranslation = &DefLang; uLen = sizeof(DWORD); } wsprintf( ValueTag, TEXT("\\StringFileInfo\\%04x%04x\\FileDescription"), LOWORD(*pdwTranslation), HIWORD(*pdwTranslation) ); if (VerQueryValue( VersionBlock, ValueTag, (void **)&Description, &DataLength)) { _tcscpy( Description1, Description ); _tcslwr( Description1 ); /*
// modification made directly to the string to save runtime conversion
_tcslwr( DomesticTag1 ); _tcslwr( DomesticTag2 ); _tcslwr( DomesticTag3 ); */ if (( _tcsstr( Description1, DomesticTag1 )) || ( _tcsstr( Description1, DomesticTag2 )) || ( _tcsstr( Description1, DomesticTag3 ))) { fDomestic = true; } } } } free(VersionBlock); dwHandle = 0L; } return fDomestic; }
/////////////////////////////////////////////////////////////////////////////
// CExpressionParser::fDetect40BitSecurity
// Detect if 40-bit security is installed.
//
// Form: E=40BitSec
// Notes:
// If any of the following files are 128 bit, you can assume it's a 128bit system:
//
// (in system32)
// schannel.dll
// security.dll
// ntlmssps.dll
//
// (in system32\drivers)
// ndiswan.sys
//
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//
// Class CExpressionParser (declared in expression.h)
// Function fDetect40BitSecurity
//---------------------------------------------------------------------------
//
// Return Value --- true if the system has 40 bit security
// Parameter
// TCHAR* pszBuf --- [IN] ignored
/////////////////////////////////////////////////////////////////////////////
//
// Modified by RogerJ, 03/08/00
// Original Creator Unknown
// Modification --- UNICODE and Win64 ready, other minor modifications
//
/////////////////////////////////////////////////////////////////////////////
bool CExpressionParser::fDetect40BitSecurity(TCHAR * pszBuf) { bool fSuccess = true; TCHAR szSystemDir[MAX_PATH]; TCHAR szFilePath[MAX_PATH]; TCHAR *grFileList[] = { TEXT("schannel.dll"), TEXT("security.dll"), TEXT("ntlmssps.dll"), TEXT("drivers\\ndiswan.sys") };
if ( GetSystemDirectory(szSystemDir, sizeof(szSystemDir)/sizeof(TCHAR)) != 0 ) { // check see if the last character in szSystemDir is backslash, which will happen if the
// system directory is the root directory
if (szSystemDir[_tcslen(szSystemDir)-1]!='\\') _tcscat(szSystemDir, TEXT("\\"));
for ( int index = 0; fSuccess && (index < (sizeof(grFileList)/sizeof(grFileList[0]))); index++ ) { _tcscpy(szFilePath, szSystemDir); _tcscat(szFilePath, grFileList[index]); fSuccess = !IsThisFileDomesticOnly(szFilePath); } }
return fSuccess; }
|