mirror of https://github.com/tongzx/nt5src
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.
90 lines
2.4 KiB
90 lines
2.4 KiB
// common tools used by the various logging uis
|
|
|
|
#include "stdafx.h"
|
|
#include "logui.h"
|
|
#include "logtools.h"
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
// Given the class ID of a server, it goes into the registry and
|
|
// sets the Apartment Model flag for that object.
|
|
// The strings used here are non-localized. They are also specific
|
|
// to this routine.
|
|
BOOL FSetObjectApartmentModel( REFCLSID clsid )
|
|
{
|
|
LPOLESTR pszwSid;
|
|
LONG err;
|
|
HKEY hKey;
|
|
|
|
// transform the clsid into a string
|
|
StringFromCLSID(
|
|
clsid, //CLSID to be converted
|
|
&pszwSid //Address of output variable that receives a pointer to the resulting string
|
|
);
|
|
|
|
// put it in a cstring
|
|
CString szSid = pszwSid;
|
|
|
|
// free the ole string
|
|
CoTaskMemFree( pszwSid );
|
|
|
|
// build the registry path
|
|
CString szRegPath = _T("CLSID\\");
|
|
szRegPath += szSid;
|
|
szRegPath += _T("\\InProcServer32");
|
|
|
|
// prep the apartment name
|
|
CString szApartment = _T("Apartment");
|
|
|
|
// open the registry key
|
|
err = RegOpenKey(
|
|
HKEY_CLASSES_ROOT, // handle of open key
|
|
(LPCTSTR)szRegPath, // address of name of subkey to open
|
|
&hKey // address of handle of open key
|
|
);
|
|
if ( err != ERROR_SUCCESS )
|
|
return FALSE;
|
|
|
|
// set the apartment threading value
|
|
err = RegSetValueEx(
|
|
hKey, // handle of key to set value for
|
|
_T("ThreadingModel"), // address of value to set
|
|
0, // reserved
|
|
REG_SZ, // flag for value type
|
|
(PBYTE)(LPCTSTR)szApartment, // address of value data
|
|
(szApartment.GetLength() + 1) * sizeof(TCHAR) // size of value data
|
|
);
|
|
if ( err != ERROR_SUCCESS )
|
|
return FALSE;
|
|
|
|
// close the registry key
|
|
RegCloseKey( hKey );
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
// tests a machine name to see if it is the local machine it is
|
|
// talking about
|
|
BOOL FIsLocalMachine( LPCTSTR psz )
|
|
{
|
|
CString szLocal;
|
|
DWORD cch = MAX_COMPUTERNAME_LENGTH + 1;
|
|
BOOL fAnswer;
|
|
|
|
// get the actual name of the local machine
|
|
fAnswer = GetComputerName(szLocal.GetBuffer(cch), &cch);
|
|
szLocal.ReleaseBuffer();
|
|
if ( !fAnswer )
|
|
return FALSE;
|
|
|
|
// compare and return
|
|
fAnswer = (szLocal.CompareNoCase( psz ) == 0);
|
|
return fAnswer;
|
|
}
|