windows-nt/Source/XPSP1/NT/base/ntsetup/syssetup/dll.c
2020-09-26 16:20:57 +08:00

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);
}