/*++ Copyright (c) 1996 Microsoft Corporation Module Name: tcreate.c Abstract: Test for cluster object creation APIs Author: John Vert (jvert) 3-May-1996 Revision History: --*/ #include "windows.h" #include "cluster.h" #include "stdio.h" #include "stdlib.h" LPWSTR ClusterName=NULL; BOOL DoGroup=FALSE; BOOL DoResource=FALSE; int FirstParam=0; LPWSTR Name=NULL; LPWSTR GroupName=NULL; LPWSTR ResourceType=NULL; CHAR UsageText[] = "TCREATE [-c cluster] type name [resourcegroup resourcetype]\n" " [-p paramkey:paramname \"paramvalue\"]\n" " cluster\tspecifies the name of the cluster to connect to\n" " type\t\teither \"group\" or \"resource\"\n" " name\t\tthe friendly name of the object\n" " resourcegroup\tthe name of the group the resource should be created in.\n" " resourcetype\tthe type of resource to be created\n"; void Usage( void ) { fprintf(stderr, UsageText); exit(1); } LPWSTR GetString( IN LPSTR String ) { LPWSTR wString; DWORD Length; Length = strlen(String)+1; wString = malloc(Length*sizeof(WCHAR)); if (wString == NULL) { fprintf(stderr, "GetString couldn't malloc %d bytes\n",Length*sizeof(WCHAR)); } mbstowcs(wString, String, Length); return(wString); } void SetParam( IN HRESOURCE hRes, IN LPSTR KeyName, IN LPSTR ValueName, IN LPSTR ValueData ) { HKEY Key; HKEY Key2; HKEY ParamKey; LONG Status; LPWSTR wKeyName, wValueName, wValueData; DWORD Disposition; DWORD IntCount; DWORD Number = FALSE; DWORD Value; CHAR TestValue[16]; // // See if we got a number, instead of a string. // IntCount = sscanf( ValueData, "%d", &Value ); if ( IntCount == 1 ) { sprintf( TestValue, "%d\0", Value ); if ( strcmp(TestValue, ValueData) == 0 ) { Number = TRUE; } } wKeyName = GetString(KeyName); wValueName = GetString(ValueName); wValueData = GetString(ValueData); Key = GetClusterResourceKey(hRes, KEY_READ | KEY_WRITE); if (Key == NULL) { fprintf(stderr, "GetResourceKey failed %d\n", GetLastError()); return; } Status = ClusterRegOpenKey(Key, L"Parameters", KEY_WRITE, &Key2); if (Status != ERROR_SUCCESS) { fprintf(stderr, "SetParam: Couldn't open Parameters key error %d\n", Status); } else { Status = ClusterRegCreateKey(Key2, wKeyName, 0, KEY_WRITE, NULL, &ParamKey, &Disposition); if (Status != ERROR_SUCCESS) { fprintf(stderr, "SetParam: Couldn't create key %ws error %d\n", wKeyName,Status); } else { if ( Number ) { Status = ClusterRegSetValue(ParamKey, wValueName, REG_DWORD, (CONST BYTE *)&Value, sizeof(Value)); } else { Status = ClusterRegSetValue(ParamKey, wValueName, REG_SZ, (CONST BYTE *)wValueData, (lstrlenW(wValueData)+1)*sizeof(WCHAR)); } if (Status != ERROR_SUCCESS) { fprintf(stderr, "SetParam: Couldn't set value %ws in key %ws, error %lx\n", wValueName, wKeyName, Status); } ClusterRegCloseKey(ParamKey); } ClusterRegCloseKey(Key2); } ClusterRegCloseKey(Key); free(wKeyName); free(wValueName); free(wValueData); } void ParseArgs( int argc, char *argv[] ) { int i; DWORD ArgsSeen=0; for (i=1;i= argc) { Usage(); } FirstParam = i+1; return; default: Usage(); break; } } else { switch (ArgsSeen) { case 0: // // type // if (_stricmp(argv[i], "group")==0) { DoGroup = TRUE; } else if (_stricmp(argv[i], "resource") == 0) { DoResource = TRUE; } else { Usage(); } ArgsSeen++; break; case 1: Name = GetString(argv[i]); ArgsSeen++; break; case 2: if (DoGroup) { Usage(); } else { GroupName = GetString(argv[i]); } ArgsSeen++; break; case 3: ResourceType = GetString(argv[i]); ArgsSeen++; break; default: Usage(); } } } if (DoGroup) { if (ArgsSeen != 2) { Usage(); } } else if (DoResource) { if (ArgsSeen != 4) { Usage(); } } else { Usage(); } } _cdecl main (argc, argv) int argc; char *argv[]; { HCLUSTER hClus; HGROUP hGroup; HRESOURCE hResource; LPSTR KeyName, ParamName; LPSTR ParamValue; ParseArgs(argc, argv); hClus = OpenCluster(ClusterName); if (hClus == NULL) { fprintf(stderr, "OpenCluster %ws failed %d\n", (ClusterName == NULL) ? L"(NULL)" : ClusterName, GetLastError()); return(0); } if (DoGroup) { hGroup = CreateClusterGroup(hClus, Name); if (hGroup == NULL) { fprintf(stderr, "CreateGroup %ws failed %d\n", Name, GetLastError()); return(0); } } else if (DoResource) { hGroup = OpenClusterGroup(hClus, GroupName); if (hGroup == NULL) { fprintf(stderr, "OpenGroup %ws failed %d\n", GroupName, GetLastError()); return(0); } hResource = CreateClusterResource(hGroup, Name, ResourceType, 0); if (hResource == NULL) { fprintf(stderr, "CreateResource %ws failed %d\n", Name, GetLastError()); return(0); } while (FirstParam != 0) { // // FirstParam is the keyname:paramname. // FirstParam+1 is the paramvalue // KeyName = argv[FirstParam]; ParamValue = argv[FirstParam+1]; ParamName = strchr(KeyName,':'); if (ParamName == NULL) { Usage(); } *ParamName++ = '\0'; SetParam(hResource, KeyName, ParamName, ParamValue); FirstParam += 2; if (FirstParam == argc) { break; } if (_stricmp(argv[FirstParam], "-p") != 0) { Usage(); } if (FirstParam+2 >= argc) { fprintf(stderr, "firstparam %d, argc %d\n",FirstParam,argc); Usage(); } FirstParam+=1; } } else { Usage(); } return(0); }