Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

334 lines
9.6 KiB

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
nothunk.c
Abstract:
Code to handle routines which are being thunked down to 16 bits or
exported from the Windows 95 kernel.
Author:
Bob Day (bobday)
Revision History:
Sunil Pai (sunilp) 28-Oct-1994. Removed SHRestartWindows,
SHGetAboutInformation to start.c, deleted
Shl1632_Thunk* and Shl3216_Thunk* routines,
Removed pifmgr routines to pifmgr.c.
--*/
#include "shellprv.h"
#pragma hdrstop
//---------------------------------------------------------------------------
//
// PURPOSE: This is to support 16 bit control panel applets.
//
// EXPORTED: Internal export.
//
// DEFINED: \win\core\library\cpl16.c.
//
// USED: By display and driver applets.
//
// DETAILS: The implementation of this thunks the cplinfo returned from the
// 16 bit applet to the 32 bit cplinfo.
//
// NT doesn't support 16 bit applets. We need to decide if we do
// need to support this, accordingly this can be just a stub or
// we need to import this. Also no 32 corresponding 32 bit API
// exposed.
//
// HISTORY: BUGBUG - SUNILP
//
//----------------------------------------------------------------------------
LRESULT WINAPI CallCPLEntry16(
HINSTANCE hinst,
FARPROC16 lpfnEntry,
HWND hwndCPL,
UINT msg,
DWORD lParam1,
DWORD lParam2
) {
return 0L; // BUGBUG - 0L appears to mean un-handled, is this true?
}
//---------------------------------------------------------------------------
//
// PURPOSE:
//
//---------------------------------------------------------------------------
void RunDll_CallEntry16(
RUNDLLPROC pfn,
HWND hwndStub,
HINSTANCE hinst,
LPSTR pszParam,
int nCmdShow)
{
return;
}
VOID WINAPI UninitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
{
DeleteCriticalSection(lpCriticalSection);
}
// BUGBUG Do we want to handle this on NT? (\\tal\msdos\win\core\shell\library\cbthook.c)
BOOL CheckResourcesBeforeExec(void)
{
return TRUE;
}
// BUGBUG See SanfordS about the need to provide this
void SHGlobalDefect(DWORD lpVoid) {};
//---------------------------------------------------------------------------
//
// PURPOSE: This is to add property pages from a 16 bit dll.
//
// EXPORTED: Not exported
//
// DEFINED: \win\core\library\prt16.c
//
// USED: internally by the shelldll.
//
// DETAILS: The implements adding of prop pages from a 16 bit dll to a
// property page array. The function passed in is a 16 bit fn.
//
// We need to find out what to do about these. We probably won't
// support any 16 bit prop pages..
//
// HISTORY: BUGBUG - SUNILP
//
//----------------------------------------------------------------------------
VOID WINAPI CallAddPropSheetPages16(
LPFNADDPROPSHEETPAGES lpfn16,
LPVOID hdrop,
LPPAGEARRAY papg
) {
// Can't return error condition...
}
// BUGBUG - BobDay -
//
HMODULE WINAPI NoThkGetModuleHandle16(
LPCTSTR lpModuleName
)
{
return 0; // Return an error condition for now
}
//---------------------------------------------------------------------------
//
// PURPOSE: To get the filename from and hinst for a 16 bit module.
//
// EXPORTED: Not Exported
//
// DEFINED: \win\core\library\cpl16.c
//
// USED: internally by the shelldll.
//
// DETAILS: This cannot be supported by the 32 bit GetModuleFileName call.
// This is being used by the shell to support:
// 1) 16 bit cpls (in control1.c) [We may not support 16 bit cpls]
// 2) In ShellExecuteNormal (in shlexec.c) a new Win32 error may be
// returned from CreateProcess (ERROR_SINGLE_INSTANCE_APP). For
// this error ShellExecuteNormal examines all top level windows
// , gets the instance handle for the window and uses this
// function to get the exe name and sees if it matches. Once
// the top level window which refers to the same exe is found,
// it switches this window to be the foreground window and
// returns the handle of this.
//
// Investigation Needed: - a) When is an app a single instance app,
// how does CreateProcess know. b) Can CreateProcess on NT return
// the same behaviour. c) Is this important for us to support, why
// is this needed.
//
// HISTORY: BUGBUG - SUNILP
//
//----------------------------------------------------------------------------
// BUGBUG - BobDay - Don't know what this is for or why, needs to be removed
int WINAPI GetModuleFileName16(
HINSTANCE hinst,
LPTSTR szFileName,
int cchMax
) {
return 0; // Return an error condition for now
}
// BUGBUG - BobDay - I think this comes from KERNEL32, its prototype is in
// krnlcmn.h
DWORD WINAPI GetProcessDword( DWORD idProcess, LONG iIndex )
{
//
// We only ever use - GPD_HINST, GPD_FLAGS (for WPF_WIN16_PROCESS),
// GPD_EXP_WINVER
//
// In IsWin16Process (GPD_FLAGS) we could look at the WOWWORDs via
// GetWindowLong, or we could look at the GWL_HINST and see if the
// highword is zero.
//
// Window_GetInstance (GPD_HINST) couldn't we just call GetWindowLong
// with GWL_HINST?
//
// ShellExecuteNormal (GPD_HINST) I don't think we can fix this easily.
// can we get the pei to just have a process id instead?
//
// Window_IsLFNAware (GPD_FLAGS & GPD_EXPWINVER) we can get this info from
// user somehow eh?
//
return 0;
}
// BUGBUG - BobDay - I think this comes from KERNEL32, its prototype is in
// krnlcmn.h
BOOL WINAPI SetProcessDword( DWORD idProcess, LONG iIndex, DWORD dwValue )
{
return 0;
}
// BUGBUG - BobDay - This function needs to be added to KERNEL32. NOPE,
// according to markl we only need this because the critical section
// was located in shared memory. Possible solution here might be to create
// a named event or mutex and synchronize via it. Another possible solution
// might be to move each of the objects for which there is a critical section
// out of the shared memory segment and maintain a per-process data structure.
// normally: ReinitializeCriticalSection
VOID WINAPI NoThkReinitializeCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
) {
InitializeCriticalSection( lpCriticalSection );
}
// BUGBUG - BobDay - Some hidden function in KERNEL (16 or 32, I can't determine)
int WINAPI PK16FNF(
char *szBuffer
) {
return 0;
}
// BUGBUG - BobDay - One of the 32-bit control panel applets needs to get
// the list of drivers. This was a thunk down into the 16-bit world to call
// the GetNextDriver function. We need to do the right 32-bit thing.
HANDLE WINAPI ShellGetNextDriverName(
HANDLE hdrv,
LPSTR pszName,
int cbName
) {
return 0;
}
//---------------------------------------------------------------------------
//
// PURPOSE: This is to load 16 bit dlls
//
// EXPORTED: Not implemented in shelldll
//
// DEFINED: \win\core\win32\kernel\krnlutil.asm
//
// USED: Shell, applets, printer..
//
// DETAILS: This is used to support:
//
// 1) 16 bit cpls. (control1.c, cpls)
// 2) 16 bit dlls with property sheet extensions. (binder.c)
// 3) 16 bit printer drivers.
//
// We most probably won't support 16 bit cpls and 16 bit printer
// drivers. Need to investigate 16 bit property sheet extensions.
//
// HISTORY: BUGBUG - SUNILP
//
//----------------------------------------------------------------------------
// BUGBUG - BobDay - This function is probably used for something we don't want.
// normally LoadLibrary16
HINSTANCE WINAPI NoThkLoadLibrary16(
LPCTSTR lpLibFileName
) {
return 0;
}
//---------------------------------------------------------------------------
//
// PURPOSE: This is to free the loaded 16 bit dlls
//
// EXPORTED: Not implemented in shelldll
//
// DEFINED: \win\core\win32\kernel\krnlutil.asm
//
// USED: Shell, applets, printer..
//
// DETAILS: This is used to support:
//
// 1) 16 bit cpls. (control1.c, cpls)
// 2) 16 bit dlls with property sheet extensions. (binder.c)
// 3) 16 bit printer drivers.
//
// We most probably won't support 16 bit cpls and 16 bit printer
// drivers. Need to investigate 16 bit property sheet extensions.
//
// HISTORY: BUGBUG - SUNILP
//
//----------------------------------------------------------------------------
// BUGBUG - BobDay - This function is probably used for something we don't want.
//normally: FreeLibrary16
BOOL WINAPI NoThkFreeLibrary16(
HINSTANCE hLibModule
) {
return FALSE;
}
//---------------------------------------------------------------------------
//
// PURPOSE: To get addresses of procedures in 16 bit dlls
//
// EXPORTED: Not implemented in shelldll
//
// DEFINED: \win\core\win32\kernel\krnlutil.asm
//
// USED: Shell, applets, printer..
//
// DETAILS: This is used to support:
//
// 1) 16 bit cpls. (control1.c, cpls)
// 2) 16 bit dlls with property sheet extensions. (binder.c)
// 3) 16 bit printer drivers.
//
// We most probably won't support 16 bit cpls and 16 bit printer
// drivers. Need to investigate 16 bit property sheet extensions.
//
//
// HISTORY: BUGBUG - SUNILP
//
//----------------------------------------------------------------------------
// BUGBUG - BobDay - This function is probably used for something we don't want.
// normally: GetProcAddress16
FARPROC WINAPI NoThkGetProcAddress16(
HINSTANCE hModule,
LPCSTR lpProcName
) {
return NULL;
}