windows-nt/Source/XPSP1/NT/base/cluster/clusapi/tdepend.c
2020-09-26 16:20:57 +08:00

177 lines
3.7 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
tdepend.c
Abstract:
Test for cluster resource dependency APIs
Author:
John Vert (jvert) 3-May-1996
Revision History:
--*/
#include "windows.h"
#include "clusapi.h"
#include "stdio.h"
#include "stdlib.h"
LPWSTR ClusterName=NULL;
BOOL Remove = FALSE;
LPWSTR ResName=NULL;
LPWSTR DependsName=NULL;
CHAR UsageText[] =
"TDEPEND [-c cluster] [-r] resource dependson\n"
" cluster\tspecifies the name of the cluster to connect to\n"
" -r\t\tdependency should be removed\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
ParseArgs(
int argc,
char *argv[]
)
{
int i;
DWORD ArgsSeen=0;
for (i=1;i<argc;i++) {
if ((argv[i][0] == '-') ||
(argv[i][0] == '/')) {
switch (argv[i][1]) {
case 'c':
if (++i == argc) {
Usage();
}
ClusterName = GetString(argv[i]);
break;
case 'r':
Remove = TRUE;
break;
default:
Usage();
break;
}
} else {
switch (ArgsSeen) {
case 0:
//
// resource
//
ArgsSeen++;
ResName = GetString(argv[i]);
break;
case 1:
DependsName = GetString(argv[i]);
ArgsSeen++;
break;
default:
Usage();
}
}
}
if ((ResName == NULL) || (DependsName == NULL)) {
Usage();
}
}
_cdecl
main (argc, argv)
int argc;
char *argv[];
{
HCLUSTER hClus;
HRESOURCE hResource;
HRESOURCE hDependsOn;
DWORD Status;
ParseArgs(argc, argv);
//
// Connect to the specified cluster.
//
hClus = OpenCluster(ClusterName);
if (hClus == NULL) {
fprintf(stderr,
"OpenCluster %ws failed %d\n",
(ClusterName == NULL) ? L"(NULL)" : ClusterName,
GetLastError());
return(0);
}
//
// Open the two resources.
//
hResource = OpenClusterResource(hClus, ResName);
if (hResource == NULL) {
fprintf(stderr,
"OpenClusterResource Resource %ws failed %d\n",
ResName,
GetLastError());
return(0);
}
hDependsOn = OpenClusterResource(hClus, DependsName);
if (hDependsOn == NULL) {
fprintf(stderr,
"OpenClusterResource DependsOn %ws failed %d\n",
DependsName,
GetLastError());
return(0);
}
//
// Create or remove the dependency.
//
if (Remove) {
Status = RemoveClusterResourceDependency(hResource, hDependsOn);
if (Status != ERROR_SUCCESS) {
fprintf(stderr,
"RemoveClusterResourceDependency failed %d\n",
Status);
}
} else {
Status = AddClusterResourceDependency(hResource, hDependsOn);
if (Status != ERROR_SUCCESS) {
fprintf(stderr,
"AddClusterResourceDependency failed %d\n",
Status);
}
}
}