95 lines
1.8 KiB
C
95 lines
1.8 KiB
C
|
#include "setupp.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
HANDLE MyModuleHandle;
|
||
|
WCHAR MyModuleFileName[MAX_PATH];
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
CommonProcessAttach(
|
||
|
IN BOOL Attach
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Called by CRT when _DllMainCRTStartup is the DLL entry point
|
||
|
//
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
DllMain(
|
||
|
IN HANDLE DllHandle,
|
||
|
IN DWORD Reason,
|
||
|
IN LPVOID Reserved
|
||
|
)
|
||
|
{
|
||
|
#define FUNCTION L"DllMain"
|
||
|
ULONG MyModuleFileNameLength;
|
||
|
BOOL b;
|
||
|
|
||
|
UNREFERENCED_PARAMETER(Reserved);
|
||
|
|
||
|
b = TRUE;
|
||
|
|
||
|
switch(Reason) {
|
||
|
|
||
|
case DLL_PROCESS_ATTACH:
|
||
|
|
||
|
MyModuleHandle = DllHandle;
|
||
|
|
||
|
MyModuleFileNameLength =
|
||
|
GetModuleFileNameW(MyModuleHandle, MyModuleFileName, RTL_NUMBER_OF(MyModuleFileName));
|
||
|
if (MyModuleFileNameLength == 0) {
|
||
|
SetupDebugPrint1(L"SETUP: GetModuleFileNameW failed in " FUNCTION L", LastError is %d\n", GetLastError());
|
||
|
b = FALSE;
|
||
|
goto Exit;
|
||
|
}
|
||
|
if (MyModuleFileNameLength > RTL_NUMBER_OF(MyModuleFileName)) {
|
||
|
SetupDebugPrint(L"SETUP: GetModuleFileNameW failed in " FUNCTION L", LastError is ERROR_INSUFFICIENT_BUFFER\n");
|
||
|
b = FALSE;
|
||
|
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||
|
goto Exit;
|
||
|
}
|
||
|
|
||
|
b = CommonProcessAttach(TRUE);
|
||
|
//
|
||
|
// Fall through to process first thread
|
||
|
//
|
||
|
|
||
|
case DLL_THREAD_ATTACH:
|
||
|
|
||
|
break;
|
||
|
|
||
|
case DLL_PROCESS_DETACH:
|
||
|
|
||
|
CommonProcessAttach(FALSE);
|
||
|
break;
|
||
|
|
||
|
case DLL_THREAD_DETACH:
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
Exit:
|
||
|
return(b);
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
CommonProcessAttach(
|
||
|
IN BOOL Attach
|
||
|
)
|
||
|
{
|
||
|
BOOL b;
|
||
|
|
||
|
//
|
||
|
// Assume success for detach, failure for attach
|
||
|
//
|
||
|
b = !Attach;
|
||
|
|
||
|
if(Attach) {
|
||
|
b = RegisterActionItemListControl(TRUE) && (PlatformSpecificInit() == NO_ERROR);
|
||
|
} else {
|
||
|
RegisterActionItemListControl(FALSE);
|
||
|
}
|
||
|
|
||
|
return(b);
|
||
|
}
|