|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1995 - 1995.
//
// File: util.cxx
//
// Contents: Misc helper functions
//
// History: 5-Apr-95 BruceFo Created
//
//----------------------------------------------------------------------------
#include "headers.hxx"
#pragma hdrstop
#include "resource.h"
#include "util.hxx"
//////////////////////////////////////////////////////////////////////////////
#define NETMSG_DLL TEXT("netmsg.dll")
//////////////////////////////////////////////////////////////////////////////
//+-------------------------------------------------------------------------
//
// Function: MyFormatMessageText
//
// Synopsis: Given a resource IDs, load strings from given instance
// and format the string into a buffer
//
// History: 11-Aug-93 WilliamW Created.
//
//--------------------------------------------------------------------------
VOID MyFormatMessageText( IN HRESULT dwMsgId, IN PWSTR pszBuffer, IN DWORD dwBufferSize, IN va_list * parglist ) { //
// get message from system or app msg file.
//
DWORD dwReturn = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE, g_hInstance, dwMsgId, LANG_USER_DEFAULT, pszBuffer, dwBufferSize, parglist);
if (0 == dwReturn) // couldn't find message
{ appDebugOut((DEB_IERROR, "FormatMessage failed, 0x%08lx\n", GetLastError()));
WCHAR szText[200]; LoadString(g_hInstance, IDS_APP_MSG_NOT_FOUND, szText, ARRAYLEN(szText)); wsprintf(pszBuffer,szText,dwMsgId); } }
//+-------------------------------------------------------------------------
//
// Function: MyCommonDialog
//
// Synopsis: Common popup dialog routine - stole from diskadm directory
//
//--------------------------------------------------------------------------
DWORD MyCommonDialog( IN HWND hwnd, IN HRESULT dwMsgCode, IN PWSTR pszCaption, IN DWORD dwFlags, IN va_list arglist ) { WCHAR szMsgBuf[500];
MyFormatMessageText(dwMsgCode, szMsgBuf, ARRAYLEN(szMsgBuf), &arglist); return MessageBox(hwnd, szMsgBuf, pszCaption, dwFlags); }
//+-------------------------------------------------------------------------
//
// Function: MyErrorDialog
//
// Synopsis: This routine retreives a message from the app or system
// message file and displays it in a message box.
//
// Note: Stole from diskadm directory
//
//--------------------------------------------------------------------------
VOID MyErrorDialog( IN HWND hwnd, IN HRESULT dwErrorCode, ... ) { WCHAR szCaption[100]; va_list arglist;
va_start(arglist, dwErrorCode);
LoadString(g_hInstance, IDS_MSGTITLE, szCaption, ARRAYLEN(szCaption)); MyCommonDialog(hwnd, dwErrorCode, szCaption, MB_ICONSTOP | MB_OK, arglist);
va_end(arglist); }
//+-------------------------------------------------------------------------
//
// Function: MessageFromError
//
// Synopsis: MessageFromError returns a message ID which is more or
// less appropriate to a return code from a remoted
// NetServerGetInfo.
//
// History: 26-Sep-95 BruceFo Stolen from Win95
//
//--------------------------------------------------------------------------
HRESULT MessageFromError( NET_API_STATUS err ) { switch (err) { case ERROR_ACCESS_DENIED: case ERROR_NETWORK_ACCESS_DENIED: return MSG_ACCESSDENIED; case ERROR_BAD_NETPATH: return MSG_SERVERNOTFOUND; default: return MSG_CANTREMOTE; }
return 0; }
//----------------------------------------------------------------------------
CWaitCursor::CWaitCursor(UINT idResCursor) { _hcurWait = _hcurOld = NULL;
if (0 != idResCursor) { _hcurWait = LoadCursor(g_hInstance, MAKEINTRESOURCE(idResCursor)); _hcurOld = SetCursor(_hcurWait); } else { _hcurOld = SetCursor(LoadCursor(NULL, IDC_WAIT)); } }
CWaitCursor::~CWaitCursor() { ::SetCursor( _hcurOld ); if (_hcurWait) { ::DestroyCursor( _hcurWait ); } }
//----------------------------------------------------------------------------
NET_API_STATUS MyNetpGetDomainNameEx ( IN LPWSTR MachineName, OUT LPWSTR* DomainNamePtr, // alloc and set ptr (free with NetApiBufferFree)
OUT PBOOL IsWorkgroupName )
/*++
Routine Description:
Returns the name of the domain or workgroup this machine belongs to. Stolen from netlib and hacked to remote it.
Arguments:
MachineName - The machine in question
DomainNamePtr - The name of the domain or workgroup
IsWorkgroupName - Returns TRUE if the name is a workgroup name. Returns FALSE if the name is a domain name.
Return Value:
NERR_Success - Success. NERR_CfgCompNotFound - There was an error determining the domain name
--*/ { NET_API_STATUS status; NTSTATUS ntstatus; LSA_HANDLE PolicyHandle; PPOLICY_ACCOUNT_DOMAIN_INFO PrimaryDomainInfo; OBJECT_ATTRIBUTES ObjAttributes; UNICODE_STRING unicodeMachineName;
//
// Check for caller's errors.
//
if (DomainNamePtr == NULL) { return ERROR_INVALID_PARAMETER; }
//
// Open a handle to the machine's security policy. Initialize the
// objects attributes structure first.
//
InitializeObjectAttributes( &ObjAttributes, NULL, 0L, NULL, NULL );
RtlInitUnicodeString(&unicodeMachineName, MachineName);
ntstatus = LsaOpenPolicy( &unicodeMachineName, &ObjAttributes, POLICY_VIEW_LOCAL_INFORMATION, &PolicyHandle );
if (! NT_SUCCESS(ntstatus)) { appDebugOut((DEB_ERROR, "NetpGetDomainName: LsaOpenPolicy returned 0x%08lx\n", ntstatus)); return NERR_CfgCompNotFound; }
//
// Get the name of the primary domain from LSA
//
ntstatus = LsaQueryInformationPolicy( PolicyHandle, PolicyPrimaryDomainInformation, (PVOID *) &PrimaryDomainInfo );
if (! NT_SUCCESS(ntstatus)) { appDebugOut((DEB_ERROR, "NetpGetDomainName: LsaQueryInformationPolicy failed 0x%08lx\n", ntstatus)); (void) LsaClose(PolicyHandle); return NERR_CfgCompNotFound; }
(void) LsaClose(PolicyHandle);
status = NetApiBufferAllocate( PrimaryDomainInfo->DomainName.Length + sizeof(WCHAR), (LPVOID*)DomainNamePtr); if (status != NERR_Success) { (void) LsaFreeMemory((PVOID) PrimaryDomainInfo); return status; }
ZeroMemory( *DomainNamePtr, PrimaryDomainInfo->DomainName.Length + sizeof(WCHAR) );
CopyMemory( *DomainNamePtr, PrimaryDomainInfo->DomainName.Buffer, PrimaryDomainInfo->DomainName.Length );
*IsWorkgroupName = (PrimaryDomainInfo->DomainSid == NULL);
(void) LsaFreeMemory((PVOID) PrimaryDomainInfo);
return NERR_Success; }
|