Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

149 lines
2.7 KiB

/*++
Copyright (c) 2001 Microsoft Corporation
Module Name:
injectee.cxx
Abstract:
Injectee
Author:
Larry Zhu (LZhu) December 1, 2001 Created
Environment:
User Mode
Revision History:
--*/
#include "precomp.hxx"
#pragma hdrstop
#include "injectee.hxx"
BOOL
DllMain(
IN HANDLE hModule,
IN DWORD dwReason,
IN DWORD dwReserved
)
{
return DllMainDefaultHandler(hModule, dwReason, dwReason);
}
#if 0
Return Values for Start():
ERROR_NO_MORE_USER_HANDLES unload repeatedly
ERROR_SERVER_HAS_OPEN_HANDLES no unload at all
others unload once
#endif 0
int
Start(
IN ULONG cbParameters,
IN VOID* pvParameters
)
{
// do your stuff
HMODULE hLib = LoadLibraryA((CHAR*) pvParameters);
//
// Unload the dll
//
if (hLib)
{
DebugPrintf(SSPI_LOG, "Start() LoadLibraryA(%s)\n", pvParameters);
while (FreeLibrary(hLib))
{
}
}
else
{
DebugPrintf(SSPI_ERROR, "Start() LoadLibraryA(%s) failed with last error %#x\n", pvParameters, GetLastError());
}
return 0;
}
int
RunIt(
IN ULONG cbParameters,
IN VOID* pvParameters
)
{
//
// RunItDefaultHandler calls Start() and adds try except
//
return RunItDefaultHandler(cbParameters, pvParameters);
}
int
Init(
IN ULONG argc,
IN PCSTR argv[],
OUT ULONG* pcbParameters,
OUT VOID** ppvParameters
)
{
DWORD dwErr = ERROR_SUCCESS;
CHAR Parameters[REMOTE_PACKET_SIZE] = {0};
ULONG cbBuffer = sizeof(Parameters);
ULONG cbParameter = 0;
DebugPrintf(SSPI_LOG, "Init: Hello world!\n");
*pcbParameters = 0;
*ppvParameters = NULL;
if (argc == 1)
{
memcpy(Parameters + cbParameter, argv[0], strlen(argv[0]) + 1);
cbParameter += strlen(argv[0]) + 1;
cbParameter++; // add a NULL
dwErr = ERROR_SUCCESS;
}
else // return "Usage" in ppvParameters, must be a NULL terminated string
{
strcpy(Parameters, "<dll to be unloaded>");
cbParameter = strlen(Parameters) + 1;
dwErr = ERROR_INVALID_PARAMETER; // will display usage
}
*ppvParameters = new CHAR[cbParameter];
if (*ppvParameters)
{
*pcbParameters = cbParameter;
memcpy(*ppvParameters, Parameters, *pcbParameters);
}
else
{
dwErr = ERROR_OUTOFMEMORY;
goto Cleanup;
}
#if 0
dwErr = ERROR_CONTINUE; // use the default Init handler in injecter
#endif
Cleanup:
return dwErr;
}