Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
node.c
Abstract:
Public interfaces for managing the nodes of a cluster
Author:
John Vert (jvert) 11-Jan-1996
Revision History:
--*/ #include "apip.h"
HNODE_RPC s_ApiOpenNode( IN handle_t IDL_handle, IN LPCWSTR lpszNodeName, OUT error_status_t *Status )
/*++
Routine Description:
Opens a handle to an existing node object.
Arguments:
IDL_handle - RPC binding handle, not used.
lpszNodeName - Supplies the name of the node to open.
Status - Returns any error
Return Value:
A context handle to a node object if successful
NULL otherwise.
--*/
{ HNODE_RPC Node; PAPI_HANDLE Handle;
if (ApiState != ApiStateOnline) { *Status = ERROR_SHARING_PAUSED; return(NULL); } Handle = LocalAlloc(LMEM_FIXED, sizeof(API_HANDLE)); if (Handle == NULL) { *Status = ERROR_NOT_ENOUGH_MEMORY; return(NULL); }
Node = OmReferenceObjectByName(ObjectTypeNode, lpszNodeName); if (Node != NULL) { *Status = ERROR_SUCCESS; } else { *Status = ERROR_CLUSTER_NODE_NOT_FOUND; LocalFree(Handle); return(NULL); } Handle->Type = API_NODE_HANDLE; Handle->Node = Node; Handle->Flags = 0; InitializeListHead(&Handle->NotifyList); return(Handle); }
error_status_t s_ApiGetNodeId( IN HNODE_RPC hNode, OUT LPWSTR *pGuid )
/*++
Routine Description:
Returns the unique identifier for a node.
Arguments:
hNode - Supplies the node whose identifer is to be returned
pGuid - Returns the unique identifier. This memory must be freed on the client side.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise.
--*/
{ PNM_NODE Node; DWORD IdLen; LPCWSTR Id;
API_ASSERT_INIT();
VALIDATE_NODE(Node, hNode);
Id = OmObjectId(Node); CL_ASSERT(Id != NULL);
IdLen = (lstrlenW(Id)+1)*sizeof(WCHAR); *pGuid = MIDL_user_allocate(IdLen); if (*pGuid == NULL) { return(ERROR_NOT_ENOUGH_MEMORY); } CopyMemory(*pGuid, Id, IdLen); return(ERROR_SUCCESS); }
error_status_t s_ApiCloseNode( IN OUT HNODE_RPC *phNode )
/*++
Routine Description:
Closes an open node context handle.
Arguments:
Node - Supplies a pointer to the HNODE_RPC to be closed. Returns NULL
Return Value:
None.
--*/
{ PNM_NODE Node; PAPI_HANDLE Handle;
API_ASSERT_INIT();
VALIDATE_NODE(Node, *phNode);
Handle = (PAPI_HANDLE)*phNode; ApipRundownNotify(Handle);
OmDereferenceObject(Node); LocalFree(*phNode); *phNode = NULL;
return(ERROR_SUCCESS); }
VOID HNODE_RPC_rundown( IN HNODE_RPC Node )
/*++
Routine Description:
RPC rundown procedure for a HNODE_RPC. Just closes the handle.
Arguments:
Node - supplies the HNODE_RPC that is to be rundown.
Return Value:
None.
--*/
{
s_ApiCloseNode(&Node);
}
error_status_t s_ApiGetNodeState( IN HNODE_RPC hNode, OUT DWORD *lpState )
/*++
Routine Description:
Returns the current state of the specified node.
Arguments:
hNode - Supplies the node whose state is to be returned.
lpState - Returns the current state of the node
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{ PNM_NODE Node;
API_ASSERT_INIT();
VALIDATE_NODE(Node, hNode);
// *lpState = NmGetNodeState( Node );
*lpState = NmGetExtendedNodeState( Node ); return( ERROR_SUCCESS ); }
error_status_t s_ApiPauseNode( IN HNODE_RPC hNode )
/*++
Routine Description:
Pauses a node in the cluster
Arguments:
hNode - Supplies the node to be paused.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{ DWORD Status; PNM_NODE Node;
API_ASSERT_INIT();
VALIDATE_NODE(Node, hNode);
Status = NmPauseNode( Node ); return( Status );
}
error_status_t s_ApiResumeNode( IN HNODE_RPC hNode )
/*++
Routine Description:
Resumes a node in the cluster
Arguments:
hNode - Supplies the node to be resumed.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{ DWORD Status; PNM_NODE Node;
API_ASSERT_INIT();
VALIDATE_NODE(Node, hNode);
Status = NmResumeNode( Node ); return( Status );
}
error_status_t s_ApiEvictNode( IN HNODE_RPC hNode )
/*++
Routine Description:
Pauses a node in the cluster
Arguments:
hNode - Supplies the node to be evicted.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{ DWORD Status; PNM_NODE Node;
API_ASSERT_INIT();
VALIDATE_NODE(Node, hNode);
Status = NmEvictNode( Node ); return( Status );
}
|