/**************************************************************************** Copyright (c) Microsoft Corporation 1997 All rights reserved ***************************************************************************/ #include "pch.h" #include #include DEFINE_MODULE("Main"); // Globals HINSTANCE g_hinstance = NULL; #define BINL_PARAMETERS_KEY L"System\\CurrentControlSet\\Services\\Binlsvc\\Parameters" #define GUID_SIZE 32 #define MAC_SIZE 12 #define MACHINE_NAME_SIZE 20 // // // DWORD OscCreateAccount( LPTSTR GUID, LPTSTR Name ) { DWORD Error; TCHAR szGUID[ GUID_SIZE + 1 ]; HKEY hkeyParams; HKEY hkey; DWORD dw = 0; Error = RegOpenKeyEx( HKEY_LOCAL_MACHINE, BINL_PARAMETERS_KEY, 0, KEY_READ | KEY_WRITE, &hkeyParams ); Assert( Error == ERROR_SUCCESS ); if ( Error != ERROR_SUCCESS ) goto Cleanup; Error = RegSetValueEx( hkeyParams, L"AllowAllClients", 0, REG_DWORD, (LPBYTE) &dw, sizeof(dw)); Assert( Error == ERROR_SUCCESS ); if ( lstrlen( GUID ) == MAC_SIZE ) { wsprintf( szGUID, TEXT("%020x%s"), 0, GUID ); } else { lstrcpy( szGUID, GUID ); } Error = RegCreateKey( hkeyParams, szGUID, &hkey ); Assert( Error == ERROR_SUCCESS ); if ( Error == ERROR_SUCCESS ) { RegCloseKey( hkey ); } RegCloseKey( hkeyParams ); Cleanup: return Error; } // // // DWORD OscDeleteAccount( LPTSTR GUID, LPTSTR Name ) { DWORD Error; TCHAR szGUID[ GUID_SIZE + 1 ]; HKEY hkeyParams; HKEY hkey; DWORD dw = 0; Error = RegOpenKeyEx( HKEY_LOCAL_MACHINE, BINL_PARAMETERS_KEY, 0, KEY_READ | KEY_WRITE, &hkeyParams ); Assert( Error == ERROR_SUCCESS ); if ( Error != ERROR_SUCCESS ) goto Cleanup; Error = RegSetValueEx( hkeyParams, L"AllowAllClients", 0, REG_DWORD, (LPBYTE) &dw, sizeof(dw)); Assert( Error == ERROR_SUCCESS ); if ( lstrlen( GUID ) == MAC_SIZE ) { wsprintf( szGUID, TEXT("%020x%s"), 0, GUID ); } else { lstrcpy( szGUID, GUID ); } Error = RegDeleteKey( hkeyParams, szGUID ); Assert( Error == ERROR_SUCCESS ); RegCloseKey( hkeyParams ); Cleanup: return Error; } // // // BOOL CALLBACK ClientDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { NMHDR FAR *lpnmhdr; switch ( uMsg ) { case WM_INITDIALOG: CenterDialog( hDlg ); SendMessage( GetDlgItem( hDlg, IDC_E_MAC), EM_LIMITTEXT, (WPARAM)32, 0 ); Button_SetCheck( GetDlgItem( hDlg, IDC_ADD ), BST_CHECKED ); break; case WM_COMMAND: { switch ( LOWORD( wParam ) ) { case IDOK: { DWORD dwLen; TCHAR szGUID[ GUID_SIZE + 1 ]; TCHAR szMachineName[ MACHINE_NAME_SIZE + 1]; GetDlgItemText( hDlg, IDC_E_MAC, szGUID, ARRAYSIZE( szGUID ) ); GetDlgItemText( hDlg, IDC_E_MACHINENAME, szMachineName, ARRAYSIZE( szMachineName ) ); dwLen = lstrlen( szGUID ); if (( dwLen != GUID_SIZE ) && ( dwLen != MAC_SIZE )) { MessageBox( hDlg, TEXT("A valid GUID is 32 digits.\nA valid MAC is 12.\nPlease correct your entry."), TEXT("Not a valid GUID/MAC"), MB_OK ); } else { if ( BST_CHECKED == Button_GetCheck( GetDlgItem( hDlg, IDC_ADD ) ) ) { OscCreateAccount( szGUID, szMachineName ); } else { OscDeleteAccount( szGUID, szMachineName ); } } } Edit_SetText( GetDlgItem( hDlg, IDC_E_MAC), L"" ); break; case IDCANCEL: EndDialog( hDlg, IDCANCEL ); break; case IDC_E_MAC: { DWORD dwLen; TCHAR szGUID[ GUID_SIZE + 1 ]; TCHAR szNumber[ 64 ]; GetDlgItemText( hDlg, IDC_E_MAC, szGUID, ARRAYSIZE( szGUID )); dwLen = lstrlen( szGUID ); wsprintf( szNumber, TEXT("Digits = %u"), dwLen ); SetWindowText( GetDlgItem( hDlg, IDC_S_NUMBER), szNumber ); } break; } } break; default: return FALSE; } return TRUE; } // // WinMain() // int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HRESULT hr = S_OK; HKEY hkey; DWORD Error; g_hinstance = hInstance; INITIALIZE_TRACE_MEMORY; Error = RegOpenKeyEx( HKEY_LOCAL_MACHINE, BINL_PARAMETERS_KEY, 0, KEY_QUERY_VALUE, &hkey ); if( Error != ERROR_SUCCESS ) { return -2; } Error = DialogBox( g_hinstance, MAKEINTRESOURCE( IDD_CLIENT ), NULL, ClientDlgProc ); Assert( Error != -1 ); UNINITIALIZE_TRACE_MEMORY; RRETURN(hr); } // stolen from the CRT, used to shrink our code int _stdcall ModuleEntry(void) { int i; STARTUPINFOA si; LPSTR pszCmdLine = GetCommandLineA(); if ( *pszCmdLine == '\"' ) { /* * Scan, and skip over, subsequent characters until * another double-quote or a null is encountered. */ while ( *++pszCmdLine && (*pszCmdLine != '\"') ); /* * If we stopped on a double-quote (usual case), skip * over it. */ if ( *pszCmdLine == '\"' ) pszCmdLine++; } else { while (*pszCmdLine > ' ') pszCmdLine++; } /* * Skip past any white space preceeding the second token. */ while (*pszCmdLine && (*pszCmdLine <= ' ')) { pszCmdLine++; } si.dwFlags = 0; GetStartupInfoA(&si); i = WinMain(GetModuleHandle(NULL), NULL, pszCmdLine, si.dwFlags & STARTF_USESHOWWINDOW ? si.wShowWindow : SW_SHOWDEFAULT); ExitProcess(i); return i; // We never come here. }