#include #include #include #include #define MACH_I386 PROCESSOR_ARCHITECTURE_INTEL #define MACH_MIPS PROCESSOR_ARCHITECTURE_MIPS #define MACH_ALPHA PROCESSOR_ARCHITECTURE_ALPHA #define MACH_PPC PROCESSOR_ARCHITECTURE_PPC typedef struct SERVERLIST { LPSTR ServerName; DWORD MachineType; DWORD Preference; LPSTR Shares; BOOL Valid; } SERVERLIST, *LPSERVERLIST; CHAR ConnName[MAX_PATH]; CHAR ConnDrive[MAX_PATH]; BOOL DefineEnvVariable = FALSE; BOOL Publics = FALSE; BOOL FreeBuild = TRUE; CHAR DesiredDrive; BOOL SetDrive; BOOL Quiet; DWORD BuildNumber; SERVERLIST Servers[] = { "\\\\ntx861", MACH_I386, 0, NULL, 1, "\\\\ntx862", MACH_I386, 0, NULL, 1, "\\\\ntx863", MACH_I386, 0, NULL, 1, "\\\\ntx864", MACH_I386, 0, NULL, 1, "\\\\ntx865", MACH_I386, 0, NULL, 1, "\\\\ntjazz1", MACH_MIPS, 0, NULL, 1, "\\\\ntjazz2", MACH_MIPS, 0, NULL, 1, "\\\\ntalpha1", MACH_ALPHA, 0, NULL, 1, "\\\\ntalpha2", MACH_ALPHA, 0, NULL, 1, "\\\\ntppc1", MACH_PPC, 0, NULL, 1, "\\\\ntppc2", MACH_PPC, 0, NULL, 1, NULL, 0, 0, NULL, 0, }; #define MAX_SERVERS (sizeof(Servers)/sizeof(SERVERLIST)) DWORD FastestResponseTickCount = 0xFFFFFFFF; DWORD FastestResponseSi = MAX_SERVERS; DWORD GetShares(DWORD); LPSTR FindShareSubName(DWORD,LPSTR); BOOL IsExistingConnection(LPSTR); VOID CancelConnection(VOID); BOOL EstablishConnection(LPSTR); VOID GetCommandLineArgs(VOID); VOID Usage(VOID); VOID _cprintf(LPSTR,...); int _cdecl main( void ) { DWORD i; SYSTEM_INFO si; LPSTR p; LPSTR share; BOOL existing; BOOL firstServer=TRUE; BOOL gotShares; HANDLE hThread; DWORD dwThreadId; DWORD dwExitCode; GetCommandLineArgs(); GetSystemInfo( &si ); if (FreeBuild) { if (Publics) { share = "FreePub"; } else { share = "Fre.Wks"; } } else { if (Publics) { share = "ChkPub"; } else { share = "Chk.Wks"; } } try { for (i=0; i build) { build = tmpbld; share = p; } } p += strlen(p) + 1; } if (!build) { return NULL; } p2 = malloc( strlen(Servers[si].ServerName) + strlen(ShareSubName) + 16 ); sprintf( p2, "%s\\%s", Servers[si].ServerName, share ); return p2; } BOOL IsExistingConnection( LPSTR RemoteName ) { DWORD rc; HANDLE hEnum; DWORD Entries; NETRESOURCE *nrr = NULL; DWORD cb; DWORD i; DWORD ss; BOOL rval = FALSE; rc = WNetOpenEnum( RESOURCE_CONNECTED, RESOURCETYPE_ANY, 0, NULL, &hEnum ); if (rc != NO_ERROR) { rc = GetLastError(); return FALSE; } ss = 0; cb = 64 * 1024; nrr = malloc( cb ); ZeroMemory( nrr, cb ); while( TRUE ) { Entries = (DWORD)-1; rc = WNetEnumResource( hEnum, &Entries, nrr, &cb ); if (rc == ERROR_NO_MORE_ITEMS) { break; } else if (rc == ERROR_MORE_DATA) { cb += 16; nrr = realloc( nrr, cb ); ZeroMemory( nrr, cb ); continue; } else if (rc != NO_ERROR) { rc = GetLastError(); break; } for (i=0; i 1) && (!(mask&1))) { drv[0] = (CHAR)('a' + i); drv[1] = ':'; drv[2] = 0; break; } mask = mask >> 1; } } nr.dwScope = 0; nr.dwType = RESOURCETYPE_DISK; nr.dwDisplayType = 0; nr.dwUsage = 0; if (drv[0]) { nr.lpLocalName = drv; } else { nr.lpLocalName = NULL; } nr.lpRemoteName = RemoteName; nr.lpComment = NULL; nr.lpProvider = NULL; rc = WNetAddConnection2( &nr, NULL, NULL, 0 ); if (rc != NO_ERROR) { rc = GetLastError(); return FALSE; } strcpy( ConnDrive, drv ); strcpy( ConnName, RemoteName ); return TRUE; } VOID GetCommandLineArgs( VOID ) { CHAR *lpstrCmd = GetCommandLine(); UCHAR ch; DWORD i; BOOLEAN rval = FALSE; LPSTR p; CHAR drive[255]; do { ch = *lpstrCmd++; } while (ch != ' ' && ch != '\t' && ch != '\0'); while (ch == ' ' || ch == '\t') { ch = *lpstrCmd++; } while (ch == '-' || ch == '/') { ch = *lpstrCmd++; do { switch (tolower(ch)) { case 'c': FreeBuild = FALSE; ch = *lpstrCmd++; break; case 'e': DefineEnvVariable = TRUE; ch = *lpstrCmd++; break; case 'f': FreeBuild = TRUE; ch = *lpstrCmd++; break; case 'p': Publics = TRUE; ch = *lpstrCmd++; break; case 's': SetDrive = TRUE; ch = *lpstrCmd++; break; case 'q': Quiet = TRUE; ch = *lpstrCmd++; break; case 'b': // skip whitespace do { ch = *lpstrCmd++; } while (ch == ' ' || ch == '\t'); i=0; // this isn't the same as xtoi!! // it will just take a hex digit in a // decimal position!! while ((ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f') || (ch >= '0' && ch <= '9')) { if (isalpha(ch)) { i = i * 10 + 10 + toupper(ch) - 'A'; } else { i = i * 10 + ch - '0'; } ch = *lpstrCmd++; } BuildNumber = i; break; case '?': Usage(); ch = *lpstrCmd++; break; default: ch = *lpstrCmd++; break; } } while (ch != ' ' && ch != '\t' && ch != '\0'); while (ch == ' ' || ch == '\t') { ch = *lpstrCmd++; } } drive[0] = drive[1] = drive[2] = 0; if (ch) { i = 0; do { drive[i++] = ch; ch = *lpstrCmd++; } while( ch ); drive[i] = 0; } if (drive[2]) { _cprintf( "invalid drive letter\n" ); exit(1); } if (drive[1]) { if (drive[1] != ':') { _cprintf( "invalid drive letter\n" ); exit(1); } } if (drive[0]) { DesiredDrive = drive[0]; } return; } VOID Usage( VOID ) { _cprintf( "Microsoft (R) Windows NT (TM) Version 3.5 CURRIDW\n" ); _cprintf( "Copyright (C) 1994 Microsoft Corp. All rights reserved\n\n" ); _cprintf( "usage: CURRIDW [-?] [-c] [-f] [-t] [-r] [-s] [-q] [-b bldnum] [drive letter]\n" ); _cprintf( " [-?] display this message\n" ); _cprintf( " [-c] checked build\n" ); _cprintf( " [-e] generate env var script\n"); _cprintf( " [-p] publics, not binaries\n"); _cprintf( " [-f] free build\n" ); _cprintf( " [-t] triple boot\n" ); _cprintf( " [-r] retail\n" ); _cprintf( " [-s] set a drive letter\n" ); _cprintf( " [-b bldnum] select a build number\n" ); _cprintf( " [-q] quiet mode\n" ); _cprintf( " [drive] \n" ); ExitProcess(0); } VOID _cprintf( LPSTR format, ... ) { va_list marker; char buf[512]; va_start( marker, format ); _vsnprintf( buf, sizeof(buf), format, marker ); va_end( marker); if (!Quiet) { printf( "%s", buf ); } }