1102 lines
29 KiB
C
1102 lines
29 KiB
C
|
/*++
|
|||
|
|
|||
|
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 ));
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|