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

1102 lines
29 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
ioctl.c
Abstract:
Implements server side of the resource and resource type
IOCTL interfaces in the CLUSAPI.
Author:
John Vert (jvert) 10/16/1996
Revision History:
--*/
#include "apip.h"
error_status_t
s_ApiNodeResourceControl(
IN HRES_RPC hResource,
IN HNODE_RPC hNode,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a resource.
Arguments:
hResource - Supplies a handle to the resource to be controlled.
hNode - Supplies a handle to the node on which the resource
control should be delivered. If this is NULL, the node where
the resource is online is used.
dwControlCode- Supplies the control code that defines the
structure and action of the resource control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the resource.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer..
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the resource..
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the resource..
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PFM_RESOURCE Resource;
PNM_NODE Node;
API_CHECK_INIT();
VALIDATE_RESOURCE_EXISTS(Resource, hResource);
VALIDATE_NODE(Node, hNode);
return(FmResourceControl( Resource,
Node,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiResourceControl(
IN HRES_RPC hResource,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a resource.
Arguments:
hResource - Supplies a handle to the resource to be controlled.
dwControlCode- Supplies the control code that defines the
structure and action of the resource control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the resource.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer..
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the resource..
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the resource..
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PFM_RESOURCE Resource;
API_CHECK_INIT();
VALIDATE_RESOURCE_EXISTS(Resource, hResource);
return(FmResourceControl( Resource,
NULL,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiNodeResourceTypeControl(
IN HCLUSTER_RPC hCluster,
IN LPCWSTR lpszResourceTypeName,
IN HNODE_RPC hNode,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a resource type.
Arguments:
hCluster - Supplies a handle to the cluster to be controlled. Not used.
lpszResourceTypename - Supplies the name of the resource type to be
controlled.
hNode - Supplies a handle to the node on which the resource
control should be delivered. If this is NULL, the node where
the resource is online is used.
dwControlCode- Supplies the control code that defines the
structure and action of the resource type control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the resource.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer..
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the resource..
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the resource..
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PNM_NODE Node;
API_CHECK_INIT();
VALIDATE_NODE(Node, hNode);
return(FmResourceTypeControl( lpszResourceTypeName,
Node,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiResourceTypeControl(
IN HCLUSTER_RPC hCluster,
IN LPCWSTR lpszResourceTypeName,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a resource type.
Arguments:
hCluster - Supplies a handle to the cluster to be controlled. Not used.
lpszResourceTypename - Supplies the name of the resource type to be
controlled.
hNode - Supplies a handle to the node on which the resource
control should be delivered. If this is NULL, the node where
the resource is online is used.
dwControlCode- Supplies the control code that defines the
structure and action of the resource type control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the resource.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer..
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the resource..
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the resource..
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
API_CHECK_INIT();
return(FmResourceTypeControl( lpszResourceTypeName,
NULL,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiNodeGroupControl(
IN HGROUP_RPC hGroup,
IN HNODE_RPC hNode,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a group.
Arguments:
hGroup - Supplies a handle to the group to be controlled.
hNode - Supplies a handle to the node on which the group
control should be delivered. If this is NULL, the node where
the application is bound performs the request.
dwControlCode- Supplies the control code that defines the
structure and action of the group control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs.
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the group.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer.
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the group.
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the group.
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PFM_GROUP Group;
PNM_NODE Node;
API_CHECK_INIT();
VALIDATE_GROUP_EXISTS(Group, hGroup);
VALIDATE_NODE(Node, hNode);
return(FmGroupControl( Group,
Node,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiGroupControl(
IN HGROUP_RPC hGroup,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a group.
Arguments:
hGroup - Supplies a handle to the group to be controlled.
dwControlCode- Supplies the control code that defines the
structure and action of the group control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs.
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the group.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer.
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the group.
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the group.
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PFM_GROUP Group;
API_CHECK_INIT();
VALIDATE_GROUP_EXISTS(Group, hGroup);
return(FmGroupControl( Group,
NULL,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiNodeNetworkControl(
IN HNETWORK_RPC hNetwork,
IN HNODE_RPC hNode,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a network.
Arguments:
hNetwork - Supplies a handle to the network to be controlled.
hNode - Supplies a handle to the node on which the network
control should be delivered. If this is NULL, the node where
the application is bound performs the request.
dwControlCode- Supplies the control code that defines the
structure and action of the network control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs.
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the network.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer.
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the network.
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the network.
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PNM_NETWORK Network;
PNM_NODE Node;
API_CHECK_INIT();
VALIDATE_NETWORK_EXISTS(Network, hNetwork);
VALIDATE_NODE(Node, hNode);
return(NmNetworkControl(Network,
Node,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiNetworkControl(
IN HNETWORK_RPC hNetwork,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a network.
Arguments:
hNetwork - Supplies a handle to the network to be controlled.
dwControlCode- Supplies the control code that defines the
structure and action of the network control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs.
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the network.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer.
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the network.
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the network.
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PNM_NETWORK Network;
API_CHECK_INIT();
VALIDATE_NETWORK_EXISTS(Network, hNetwork);
return(NmNetworkControl(Network,
NULL,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiNodeNetInterfaceControl(
IN HNETINTERFACE_RPC hNetInterface,
IN HNODE_RPC hNode,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a network interface.
Arguments:
hNetInterface - Supplies a handle to the network interface to be controlled.
hNode - Supplies a handle to the node on which the network
control should be delivered. If this is NULL, the node where
the application is bound performs the request.
dwControlCode- Supplies the control code that defines the
structure and action of the network control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs.
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the network.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer.
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the network.
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the network.
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PNM_INTERFACE NetInterface;
PNM_NODE Node;
API_CHECK_INIT();
VALIDATE_NETINTERFACE_EXISTS(NetInterface, hNetInterface);
VALIDATE_NODE(Node, hNode);
return(NmInterfaceControl(NetInterface,
Node,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiNetInterfaceControl(
IN HNETINTERFACE_RPC hNetInterface,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a network interface.
Arguments:
hNetInterface - Supplies a handle to the network interface to be controlled.
dwControlCode- Supplies the control code that defines the
structure and action of the network control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs.
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the network.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer.
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the network.
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the network.
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PNM_INTERFACE NetInterface;
API_CHECK_INIT();
VALIDATE_NETINTERFACE_EXISTS(NetInterface, hNetInterface);
return(NmInterfaceControl(NetInterface,
NULL,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiNodeNodeControl(
IN HNODE_RPC hNode,
IN HNODE_RPC hHostNode,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a node.
Arguments:
hNode - Supplies a handle to the node to be controlled.
hHostNode - Supplies a handle to the node on which the node
control should be delivered. If this is NULL, the node where
the application is bound performs the request.
dwControlCode- Supplies the control code that defines the
structure and action of the node control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs.
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the node.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer.
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the node.
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the node.
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PNM_NODE Node;
PNM_NODE HostNode;
API_CHECK_INIT();
VALIDATE_NODE(Node, hNode);
VALIDATE_NODE(HostNode, hHostNode);
return(NmNodeControl( Node,
HostNode,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiNodeControl(
IN HNODE_RPC hNode,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and a specific instance of a node.
Arguments:
hNode - Supplies a handle to the node to be controlled.
dwControlCode- Supplies the control code that defines the
structure and action of the node control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs.
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the node.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer.
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the node.
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the node.
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PNM_NODE Node;
API_CHECK_INIT();
VALIDATE_NODE(Node, hNode);
return(NmNodeControl( Node,
NULL,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiNodeClusterControl(
IN HCLUSTER hCluster,
IN HNODE_RPC hHostNode,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and the cluster.
Arguments:
dwControlCode- Supplies the control code that defines the
structure and action of the cluster control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs.
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the cluster.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer.
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the cluster.
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the cluster.
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
PNM_NODE HostNode;
API_CHECK_INIT();
VALIDATE_NODE(HostNode, hHostNode);
return(CsClusterControl(
HostNode,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}
error_status_t
s_ApiClusterControl(
IN HCLUSTER hCluster,
IN DWORD dwControlCode,
IN UCHAR *lpInBuffer,
IN DWORD dwInBufferSize,
OUT UCHAR *lpOutBuffer,
IN DWORD nOutBufferSize,
OUT DWORD *lpBytesReturned,
OUT DWORD *lpcbRequired
)
/*++
Routine Description:
Provides for arbitrary communication and control between an application
and the cluster.
Arguments:
dwControlCode- Supplies the control code that defines the
structure and action of the cluster control.
Values of dwControlCode between 0 and 0x10000000 are reserved
for future definition and use by Microsoft. All other values
are available for use by ISVs.
lpInBuffer- Supplies a pointer to the input buffer to be passed
to the cluster.
nInBufferSize- Supplies the size, in bytes, of the data pointed
to by lpInBuffer.
lpOutBuffer- Supplies a pointer to the output buffer to be
filled in by the cluster.
nOutBufferSize- Supplies the size, in bytes, of the available
space pointed to by lpOutBuffer.
lpBytesReturned - Returns the number of bytes of lpOutBuffer
actually filled in by the cluster.
lpcbRequired - Returns the number of bytes required if OutBuffer
is not large enough.
Return Value:
ERROR_SUCCESS if successful
Win32 error code otherwise
--*/
{
API_CHECK_INIT();
return(CsClusterControl(
NULL,
dwControlCode,
lpInBuffer,
dwInBufferSize,
lpOutBuffer,
nOutBufferSize,
lpBytesReturned,
lpcbRequired ));
}