231 lines
5.3 KiB
C++
231 lines
5.3 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
|
//
|
|
// File: nt.cpp
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#include <windows.h>
|
|
#include "unicode.h"
|
|
#include "crtem.h" // bring in malloc+free definitions
|
|
|
|
|
|
#ifdef _M_IX86
|
|
|
|
BOOL WINAPI GetUserName9x(
|
|
LPWSTR lpBuffer, // address of name buffer
|
|
LPDWORD nSize // address of size of name buffer
|
|
) {
|
|
|
|
char rgch[_MAX_PATH];
|
|
char *szBuffer;
|
|
DWORD cbBuffer;
|
|
|
|
int cchW;
|
|
BOOL fResult;
|
|
|
|
szBuffer = rgch;
|
|
cbBuffer = sizeof(rgch);
|
|
fResult = GetUserNameA(
|
|
szBuffer,
|
|
&cbBuffer);
|
|
|
|
if (!fResult)
|
|
return FALSE;
|
|
|
|
cbBuffer++; // count the NULL terminator
|
|
if (sizeof(rgch) < cbBuffer)
|
|
{
|
|
szBuffer = (char *) malloc(cbBuffer);
|
|
if(!szBuffer)
|
|
{
|
|
SetLastError(ERROR_OUTOFMEMORY);
|
|
return FALSE;
|
|
}
|
|
|
|
fResult = GetUserNameA(
|
|
szBuffer,
|
|
&cbBuffer);
|
|
cbBuffer++; // count the NULL terminator
|
|
}
|
|
|
|
if(fResult)
|
|
{
|
|
cchW = MultiByteToWideChar(
|
|
0, // codepage
|
|
0, // dwFlags
|
|
szBuffer,
|
|
cbBuffer,
|
|
lpBuffer,
|
|
*nSize);
|
|
if(cchW == 0)
|
|
fResult = FALSE;
|
|
else
|
|
*nSize = cchW - 1; // does not include NULL
|
|
}
|
|
|
|
if(szBuffer != rgch)
|
|
free(szBuffer);
|
|
|
|
return(fResult);
|
|
}
|
|
|
|
BOOL WINAPI GetUserNameU(
|
|
LPWSTR lpBuffer, // address of name buffer
|
|
LPDWORD nSize // address of size of name buffer
|
|
) {
|
|
|
|
if(FIsWinNT())
|
|
return( GetUserNameW(lpBuffer, nSize));
|
|
else
|
|
return( GetUserName9x(lpBuffer, nSize));
|
|
}
|
|
|
|
|
|
BOOL WINAPI GetComputerName9x(
|
|
LPWSTR lpBuffer, // address of name buffer
|
|
LPDWORD nSize // address of size of name buffer
|
|
) {
|
|
|
|
char rgch[_MAX_PATH];
|
|
char *szBuffer;
|
|
DWORD cbBuffer;
|
|
|
|
int cchW;
|
|
BOOL fResult;
|
|
|
|
szBuffer = rgch;
|
|
cbBuffer = sizeof(rgch);
|
|
fResult = GetComputerNameA(
|
|
szBuffer,
|
|
&cbBuffer);
|
|
|
|
if (!fResult)
|
|
return fResult;
|
|
|
|
cbBuffer++; // count the NULL terminator
|
|
if (sizeof(rgch) < cbBuffer)
|
|
{
|
|
szBuffer = (char *) malloc(cbBuffer);
|
|
if(!szBuffer)
|
|
{
|
|
SetLastError(ERROR_OUTOFMEMORY);
|
|
return FALSE;
|
|
}
|
|
|
|
fResult = GetComputerNameA(
|
|
szBuffer,
|
|
&cbBuffer);
|
|
cbBuffer++; // count the NULL terminator
|
|
}
|
|
|
|
if(fResult)
|
|
{
|
|
cchW = MultiByteToWideChar(
|
|
0, // codepage
|
|
0, // dwFlags
|
|
szBuffer,
|
|
cbBuffer,
|
|
lpBuffer,
|
|
*nSize);
|
|
if(cchW == 0)
|
|
fResult = FALSE;
|
|
else
|
|
*nSize = cchW - 1; // does not include NULL
|
|
}
|
|
|
|
if(szBuffer != rgch)
|
|
free(szBuffer);
|
|
|
|
return(fResult);
|
|
}
|
|
|
|
BOOL WINAPI GetComputerNameU(
|
|
LPWSTR lpBuffer, // address of name buffer
|
|
LPDWORD nSize // address of size of name buffer
|
|
) {
|
|
|
|
if(FIsWinNT())
|
|
return( GetComputerNameW(lpBuffer, nSize));
|
|
else
|
|
return( GetComputerName9x(lpBuffer, nSize));
|
|
}
|
|
|
|
|
|
DWORD WINAPI GetModuleFileName9x(
|
|
HMODULE hModule, // handle to module to find filename for
|
|
LPWSTR lpFilename, // pointer to buffer for module path
|
|
DWORD nSize // size of buffer, in characters
|
|
) {
|
|
|
|
char rgch[_MAX_PATH];
|
|
DWORD cbBuffer;
|
|
|
|
DWORD cch;
|
|
|
|
cbBuffer = sizeof(rgch);
|
|
cch = GetModuleFileNameA(
|
|
hModule,
|
|
rgch,
|
|
cbBuffer);
|
|
|
|
if(cch == 0)
|
|
return 0;
|
|
|
|
return MultiByteToWideChar(
|
|
0, // codepage
|
|
0, // dwFlags
|
|
rgch,
|
|
cbBuffer,
|
|
lpFilename,
|
|
nSize);
|
|
}
|
|
|
|
DWORD WINAPI GetModuleFileNameU(
|
|
HMODULE hModule, // handle to module to find filename for
|
|
LPWSTR lpFilename, // pointer to buffer for module path
|
|
DWORD nSize // size of buffer, in characters
|
|
) {
|
|
|
|
if(FIsWinNT())
|
|
return( GetModuleFileNameW(hModule, lpFilename, nSize));
|
|
else
|
|
return( GetModuleFileName9x(hModule, lpFilename, nSize));
|
|
}
|
|
|
|
|
|
HMODULE WINAPI GetModuleHandle9x(
|
|
LPCWSTR lpModuleName // address of module name to return handle for
|
|
) {
|
|
|
|
char * szBuffer = NULL;
|
|
BYTE rgb1[_MAX_PATH];
|
|
DWORD cbBuffer;
|
|
|
|
HMODULE hModule;
|
|
|
|
hModule = NULL;
|
|
if(MkMBStr(rgb1, _MAX_PATH, lpModuleName, &szBuffer) )
|
|
hModule = GetModuleHandleA(
|
|
szBuffer);
|
|
|
|
FreeMBStr(rgb1, szBuffer);
|
|
|
|
return hModule;
|
|
}
|
|
|
|
HMODULE WINAPI GetModuleHandleU(
|
|
LPCWSTR lpModuleName // address of module name to return handle for
|
|
) {
|
|
|
|
if(FIsWinNT())
|
|
return( GetModuleHandleW(lpModuleName));
|
|
else
|
|
return( GetModuleHandle9x(lpModuleName));
|
|
}
|
|
|
|
#endif // _M_IX86
|