3.1.4.2.116 ApiOpenClusterEx (Opnum 117)

(Protocol Version 3) The ApiOpenClusterEx method SHOULD<96> establish context on the server about client interaction with the cluster by means of the current RPC connection. ApiOpenClusterEx returns a context handle so that the client can refer to the context that is created in subsequent method calls.

The server MUST determine the level of access to be granted to the client (section 3.1.4). Upon success, the server MUST associate that level of access with the cluster context it has established.

The server SHOULD accept an ApiOpenClusterEx request if its protocol server state is read-only and MUST accept the request for processing if it is in the read/write state, as specified in section 3.1.1.

 HCLUSTER_RPC ApiOpenClusterEx(
   [in] DWORD dwDesiredAccess,
   [out] DWORD * lpdwGrantedAccess,
   [out] error_status_t *Status
 );

dwDesiredAccess: Indicates the access level desired by the caller. The client SHOULD set dwDesiredAccess to the bitwise OR of one or more values in the following table (except for restrictions as noted in the table). The server SHOULD permit the cluster security descriptor to express permissions other than those specified in the following table. The server SHOULD perform an access check against those other permissions if requested by the client, except if the client sets dwDesiredAccess to a value that is invalid as specified in the following table. The server SHOULD NOT support a value for dwDesiredAccess that allows the client to request an access level of "Read with Backup Privilege".

Value

Meaning

CLUSAPI_READ_ACCESS

0x00000001

The client requests a context handle that can be used in subsequent method calls that require "Read" access.

CLUSAPI_CHANGE_ACCESS

0x00000002

The client requests a context handle that can be used in subsequent method calls that require "All" access. The server MUST return ERROR_INVALID_PARAMETER (0x00000057) if the dwDesiredAccess bitwise OR includes CLUSAPI_CHANGE_ACCESS but not CLUSAPI_READ_ACCESS.

GENERIC_READ

0x80000000

The server MUST treat this value the same as CLUSAPI_READ_ACCESS.

GENERIC-WRITE

0x40000000

The server MUST treat this value the same as the bitwise OR of CLUSAPI_READ_ACCESS and CLUSAPI_CHANGE_ACCESS.

GENERIC_EXECUTE

0x20000000

The server MUST treat this value the same as the bitwise OR of CLUSAPI_READ_ACCESS and CLUSAPI_CHANGE_ACCESS.

GENERIC_ALL

0x10000000

The server MUST treat this value the same as the bitwise OR of CLUSAPI_READ_ACCESS and CLUSAPI_CHANGE_ACCESS.

MAXIMUM_ALLOWED

0x02000000

The client requests a context handle that can be used in subsequent method calls that require the maximum access level granted to the client, as specified in section 3.1.4.

lpdwGrantedAccess: A pointer to a 32-bit value that indicates the access level granted to the client. If the method fails, the client MUST ignore this value. Upon successful completion of this method, the server MUST set this value to one of the values in the following table.

Value

Meaning

GENERIC_READ

0x80000000

The returned context handle can be used in subsequent methods that require "Read" access. If the client has backup privilege, the returned context handle can also be used in subsequent methods that require "Read with Backup Privilege" access.

GENERIC_ALL

0x10000000

The returned context handle can be used in subsequent methods that require "All" access.

Status: Indicates the status of this operation. The server MUST set Status to the following error codes for the specified conditions.

Value

Meaning

ERROR_SUCCESS

0x00000000

Success.

ERROR_ACCESS_DENIED

0x00000005

dwDesiredAccess indicates a level of access exceeding what the client is entitled to (section 3.1.4).

ERROR_INVALID_PARAMETER

0x00000057

dwDesiredAccess is invalid, as specified earlier in this section.

RPC_S_PROCNUM_OUT_OF_RANGE

0x000006D1

The server does not support this method.

For any other condition, the server sets Status to a value that is not one of the values listed in the preceding table. The client MUST treat all values that are not listed in the preceding table the same, except as specified in section 3.2.4.6.

Return Values: The method MUST return a valid HCLUSTER_RPC (section 2.2.1.1) context handle to indicate success; otherwise, it MUST return NULL.