ReactOS 0.4.16-dev-338-g34e76ad
rpc.c File Reference
#include <stdarg.h>
#include <stdio.h>
#include <ntstatus.h>
#include "wine/test.h"
#include <windef.h>
#include <winbase.h>
#include <winnt.h>
#include <winerror.h>
#include <ole2.h>
#include <oleauto.h>
#include <ntsecapi.h>
#include <initguid.h>
#include <netfw.h>
#include "rpc.h"
#include "rpcdce.h"
#include "secext.h"
Include dependency graph for rpc.c:

Go to the source code of this file.

Classes

struct  twr_t
 

Macros

#define COBJMACROS
 
#define WIN32_NO_STATUS
 

Typedefs

typedef unsigned int unsigned32
 
typedef struct twr_t twr_t
 

Enumerations

enum  firewall_op {
  APP_ADD , APP_REMOVE , APP_ADD , APP_REMOVE ,
  APP_ADD , APP_REMOVE
}
 

Functions

RPC_STATUS WINAPI TowerExplode (const twr_t *tower, RPC_SYNTAX_IDENTIFIER *object, RPC_SYNTAX_IDENTIFIER *syntax, char **protseq, char **endpoint, char **address)
 
RPC_STATUS WINAPI TowerConstruct (const RPC_SYNTAX_IDENTIFIER *object, const RPC_SYNTAX_IDENTIFIER *syntax, const char *protseq, const char *endpoint, const char *address, twr_t **tower)
 
static void UuidConversionAndComparison (void)
 
static void TestDceErrorInqText (void)
 
static void test_rpc_ncacn_ip_tcp (void)
 
static void test_towers (void)
 
static void test_I_RpcMapWin32Status (void)
 
static void test_RpcStringBindingParseA (void)
 
static void test_RpcExceptionFilter (const char *func_name)
 
static void test_RpcStringBindingFromBinding (void)
 
static void test_UuidCreate (void)
 
static void test_UuidCreateSequential (void)
 
static void test_RpcBindingFree (void)
 
static void test_RpcStringFree (void)
 
static void test_RpcServerInqDefaultPrincName (void)
 
static void test_RpcServerRegisterAuthInfo (void)
 
static void test_RpcServerUseProtseq (void)
 
static void test_endpoint_mapper (RPC_CSTR protseq, RPC_CSTR address)
 
static BOOL is_process_elevated (void)
 
static BOOL is_firewall_enabled (void)
 
static HRESULT set_firewall (enum firewall_op op)
 
 START_TEST (rpc)
 

Variables

static UUID Uuid_Table [10]
 
static BOOL Uuid_Comparison_Grid [11][11]
 
static RPC_DISPATCH_FUNCTION IFoo_table []
 
static RPC_DISPATCH_TABLE IFoo_v0_0_DispatchTable
 
static const RPC_SERVER_INTERFACE IFoo___RpcServerInterface
 
static RPC_IF_HANDLE IFoo_v0_0_s_ifspec = (RPC_IF_HANDLE)& IFoo___RpcServerInterface
 
static const unsigned char tower_data_tcp_ip1 []
 
static const unsigned char tower_data_tcp_ip2 []
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 25 of file rpc.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 27 of file rpc.c.

Typedef Documentation

◆ twr_t

typedef struct twr_t twr_t

◆ unsigned32

Definition at line 43 of file rpc.c.

Enumeration Type Documentation

◆ firewall_op

Enumerator
APP_ADD 
APP_REMOVE 
APP_ADD 
APP_REMOVE 
APP_ADD 
APP_REMOVE 

Definition at line 1124 of file rpc.c.

1125{
1126 APP_ADD,
1128};
@ APP_REMOVE
Definition: rpc.c:1127
@ APP_ADD
Definition: rpc.c:1126

Function Documentation

◆ is_firewall_enabled()

static BOOL is_firewall_enabled ( void  )
static

Definition at line 1091 of file rpc.c.

1092{
1093 HRESULT hr, init;
1094 INetFwMgr *mgr = NULL;
1097 VARIANT_BOOL enabled = VARIANT_FALSE;
1098
1100
1101 hr = CoCreateInstance( &CLSID_NetFwMgr, NULL, CLSCTX_INPROC_SERVER, &IID_INetFwMgr,
1102 (void **)&mgr );
1103 ok( hr == S_OK, "got %08x\n", hr );
1104 if (hr != S_OK) goto done;
1105
1106 hr = INetFwMgr_get_LocalPolicy( mgr, &policy );
1107 ok( hr == S_OK, "got %08x\n", hr );
1108 if (hr != S_OK) goto done;
1109
1110 hr = INetFwPolicy_get_CurrentProfile( policy, &profile );
1111 if (hr != S_OK) goto done;
1112
1113 hr = INetFwProfile_get_FirewallEnabled( profile, &enabled );
1114 ok( hr == S_OK, "got %08x\n", hr );
1115
1116done:
1117 if (policy) INetFwPolicy_Release( policy );
1118 if (profile) INetFwProfile_Release( profile );
1119 if (mgr) INetFwMgr_Release( mgr );
1120 if (SUCCEEDED( init )) CoUninitialize();
1121 return (enabled == VARIANT_TRUE);
1122}
WINBASEAPI _Check_return_ _Out_ AppPolicyProcessTerminationMethod * policy
Definition: appmodel.h:47
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
short VARIANT_BOOL
Definition: compat.h:2290
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define profile
Definition: kernel32.h:12
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:278
HRESULT hr
Definition: shlfolder.c:183
static int init
Definition: wintirpc.c:33

Referenced by START_TEST().

◆ is_process_elevated()

static BOOL is_process_elevated ( void  )
static

Definition at line 1075 of file rpc.c.

1076{
1077 HANDLE token;
1079 {
1081 DWORD size;
1082 BOOL ret;
1083
1085 CloseHandle( token );
1086 return (ret && type == TokenElevationTypeFull);
1087 }
1088 return FALSE;
1089}
#define FALSE
Definition: types.h:117
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
Definition: security.c:411
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:294
#define CloseHandle
Definition: compat.h:739
#define GetCurrentProcess()
Definition: compat.h:759
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLsizeiptr size
Definition: glext.h:5919
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
int ret
enum _TOKEN_ELEVATION_TYPE TOKEN_ELEVATION_TYPE
@ TokenElevationTypeFull
Definition: winnt_old.h:2516
#define TOKEN_QUERY
Definition: setypes.h:928
@ TokenElevationType
Definition: setypes.h:983

Referenced by START_TEST().

◆ set_firewall()

static HRESULT set_firewall ( enum firewall_op  op)
static

Definition at line 1130 of file rpc.c.

1131{
1132 static const WCHAR testW[] = {'r','p','c','r','t','4','_','t','e','s','t',0};
1133 HRESULT hr, init;
1134 INetFwMgr *mgr = NULL;
1140
1142 {
1144 return E_FAIL;
1145 }
1147
1148 hr = CoCreateInstance( &CLSID_NetFwMgr, NULL, CLSCTX_INPROC_SERVER, &IID_INetFwMgr,
1149 (void **)&mgr );
1150 ok( hr == S_OK, "got %08x\n", hr );
1151 if (hr != S_OK) goto done;
1152
1153 hr = INetFwMgr_get_LocalPolicy( mgr, &policy );
1154 ok( hr == S_OK, "got %08x\n", hr );
1155 if (hr != S_OK) goto done;
1156
1157 hr = INetFwPolicy_get_CurrentProfile( policy, &profile );
1158 if (hr != S_OK) goto done;
1159
1160 hr = INetFwProfile_get_AuthorizedApplications( profile, &apps );
1161 ok( hr == S_OK, "got %08x\n", hr );
1162 if (hr != S_OK) goto done;
1163
1164 hr = CoCreateInstance( &CLSID_NetFwAuthorizedApplication, NULL, CLSCTX_INPROC_SERVER,
1165 &IID_INetFwAuthorizedApplication, (void **)&app );
1166 ok( hr == S_OK, "got %08x\n", hr );
1167 if (hr != S_OK) goto done;
1168
1169 hr = INetFwAuthorizedApplication_put_ProcessImageFileName( app, image );
1170 if (hr != S_OK) goto done;
1171
1173 hr = INetFwAuthorizedApplication_put_Name( app, name );
1175 ok( hr == S_OK, "got %08x\n", hr );
1176 if (hr != S_OK) goto done;
1177
1178 if (op == APP_ADD)
1179 hr = INetFwAuthorizedApplications_Add( apps, app );
1180 else if (op == APP_REMOVE)
1181 hr = INetFwAuthorizedApplications_Remove( apps, image );
1182 else
1183 hr = E_INVALIDARG;
1184
1185done:
1186 if (app) INetFwAuthorizedApplication_Release( app );
1187 if (apps) INetFwAuthorizedApplications_Release( apps );
1188 if (policy) INetFwPolicy_Release( policy );
1189 if (profile) INetFwProfile_Release( profile );
1190 if (mgr) INetFwMgr_Release( mgr );
1191 if (SUCCEEDED( init )) CoUninitialize();
1193 return hr;
1194}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_FAIL
Definition: ddrawi.h:102
UINT op
Definition: effect.c:236
OLECHAR * BSTR
Definition: compat.h:2293
#define MAX_PATH
Definition: compat.h:34
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
static const WCHAR testW[]
Definition: jsregexp.c:44
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339
Definition: name.c:39
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by START_TEST().

◆ START_TEST()

START_TEST ( rpc  )

Definition at line 1196 of file rpc.c.

1197{
1198 static unsigned char ncacn_np[] = "ncacn_np";
1199 static unsigned char ncalrpc[] = "ncalrpc";
1200 static unsigned char np_address[] = ".";
1201 BOOL firewall_enabled = is_firewall_enabled();
1202
1203 if (firewall_enabled && !is_process_elevated())
1204 {
1205 skip("no privileges, skipping tests to avoid firewall dialog\n");
1206 return;
1207 }
1208
1211 test_towers();
1214 test_RpcExceptionFilter("I_RpcExceptionFilter");
1215 test_RpcExceptionFilter("RpcExceptionFilter");
1223
1224 if (firewall_enabled)
1225 {
1227 if (hr != S_OK)
1228 {
1229 skip("can't authorize app in firewall %08x\n", hr);
1230 return;
1231 }
1232 }
1233
1236 test_endpoint_mapper(ncacn_np, np_address);
1237 test_endpoint_mapper(ncalrpc, NULL);
1238
1239 if (firewall_enabled) set_firewall(APP_REMOVE);
1240}
#define skip(...)
Definition: atltest.h:64
static void test_rpc_ncacn_ip_tcp(void)
Definition: rpc.c:210
static void test_RpcServerUseProtseq(void)
Definition: rpc.c:924
static void test_UuidCreateSequential(void)
Definition: rpc.c:778
static HRESULT set_firewall(enum firewall_op op)
Definition: rpc.c:1130
static void test_endpoint_mapper(RPC_CSTR protseq, RPC_CSTR address)
Definition: rpc.c:1022
static void test_RpcServerRegisterAuthInfo(void)
Definition: rpc.c:916
static void TestDceErrorInqText(void)
Definition: rpc.c:144
static void test_RpcExceptionFilter(const char *func_name)
Definition: rpc.c:649
static void test_towers(void)
Definition: rpc.c:339
static void test_RpcStringFree(void)
Definition: rpc.c:854
static void test_RpcBindingFree(void)
Definition: rpc.c:843
static void test_RpcStringBindingParseA(void)
Definition: rpc.c:571
static void test_I_RpcMapWin32Status(void)
Definition: rpc.c:427
static BOOL is_process_elevated(void)
Definition: rpc.c:1075
static void UuidConversionAndComparison(void)
Definition: rpc.c:81
static BOOL is_firewall_enabled(void)
Definition: rpc.c:1091
static void test_UuidCreate(void)
Definition: rpc.c:722
static void test_RpcStringBindingFromBinding(void)
Definition: rpc.c:694
static void test_RpcServerInqDefaultPrincName(void)
Definition: rpc.c:870

◆ test_endpoint_mapper()

static void test_endpoint_mapper ( RPC_CSTR  protseq,
RPC_CSTR  address 
)
static

Definition at line 1022 of file rpc.c.

1023{
1024 static unsigned char annotation[] = "Test annotation string.";
1026 RPC_BINDING_VECTOR *binding_vector;
1028 unsigned char *binding;
1029
1031 ok(status == RPC_S_OK, "%s: RpcServerRegisterIf failed (%u)\n", protseq, status);
1032
1033 status = RpcServerInqBindings(&binding_vector);
1034 ok(status == RPC_S_OK, "%s: RpcServerInqBindings failed with error %u\n", protseq, status);
1035
1036 /* register endpoints created in test_RpcServerUseProtseq */
1038 ok(status == RPC_S_OK, "%s: RpcEpRegisterA failed with error %u\n", protseq, status);
1039 /* reregister the same endpoint with no annotation */
1040 status = RpcEpRegisterA(IFoo_v0_0_s_ifspec, binding_vector, NULL, NULL);
1041 ok(status == RPC_S_OK, "%s: RpcEpRegisterA failed with error %u\n", protseq, status);
1042
1044 NULL, NULL, &binding);
1045 ok(status == RPC_S_OK, "%s: RpcStringBindingCompose failed (%u)\n", protseq, status);
1046
1048 ok(status == RPC_S_OK, "%s: RpcBindingFromStringBinding failed (%u)\n", protseq, status);
1049
1050 RpcStringFreeA(&binding);
1051
1053 ok(status == RPC_S_OK, "%s: RpcBindingReset failed with error %u\n", protseq, status);
1054
1057 "%s: RpcEpResolveBinding failed with error %u\n", protseq, status);
1058
1060 ok(status == RPC_S_OK, "%s: RpcBindingReset failed with error %u\n", protseq, status);
1061
1063 ok(status == RPC_S_OK, "%s: RpcBindingFree failed with error %u\n", protseq, status);
1064
1066 ok(status == RPC_S_OK, "%s: RpcServerUnregisterIf failed (%u)\n", protseq, status);
1067
1068 status = RpcEpUnregister(IFoo_v0_0_s_ifspec, binding_vector, NULL);
1069 ok(status == RPC_S_OK, "%s: RpcEpUnregisterA failed with error %u\n", protseq, status);
1070
1071 status = RpcBindingVectorFree(&binding_vector);
1072 ok(status == RPC_S_OK, "%s: RpcBindingVectorFree failed with error %u\n", protseq, status);
1073}
#define broken(x)
Definition: atltest.h:178
#define annotation(x)
Definition: dispex.idl:19
GLuint address
Definition: glext.h:9393
static RPC_IF_HANDLE IFoo_v0_0_s_ifspec
Definition: rpc.c:208
RPC_STATUS WINAPI RpcBindingFree(RPC_BINDING_HANDLE *Binding)
Definition: rpc_binding.c:787
RPC_STATUS WINAPI RpcStringBindingComposeA(RPC_CSTR ObjUuid, RPC_CSTR Protseq, RPC_CSTR NetworkAddr, RPC_CSTR Endpoint, RPC_CSTR Options, RPC_CSTR *StringBinding)
Definition: rpc_binding.c:457
RPC_STATUS WINAPI RpcBindingVectorFree(RPC_BINDING_VECTOR **BindingVector)
Definition: rpc_binding.c:802
RPC_STATUS RPC_ENTRY RpcBindingReset(RPC_BINDING_HANDLE Binding)
Definition: rpc_binding.c:1024
RPC_STATUS WINAPI RpcBindingFromStringBindingA(RPC_CSTR StringBinding, RPC_BINDING_HANDLE *Binding)
Definition: rpc_binding.c:840
RPC_STATUS WINAPI RpcEpUnregister(RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *BindingVector, UUID_VECTOR *UuidVector)
Definition: rpc_epmap.c:344
RPC_STATUS WINAPI RpcEpResolveBinding(RPC_BINDING_HANDLE Binding, RPC_IF_HANDLE IfSpec)
Definition: rpc_epmap.c:431
RPC_STATUS WINAPI RpcEpRegisterA(RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *BindingVector, UUID_VECTOR *UuidVector, RPC_CSTR Annotation)
Definition: rpc_epmap.c:296
RPC_STATUS WINAPI RpcServerRegisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, RPC_MGR_EPV *MgrEpv)
Definition: rpc_server.c:1116
RPC_STATUS WINAPI RpcServerInqBindings(RPC_BINDING_VECTOR **BindingVector)
Definition: rpc_server.c:861
RPC_STATUS WINAPI RpcServerUnregisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, UINT WaitForCallsToComplete)
Definition: rpc_server.c:1202
#define RPC_S_OK
Definition: rpcnterr.h:22
RPC_STATUS WINAPI RpcStringFreeA(RPC_CSTR *String)
Definition: rpcrt4_main.c:158
long RPC_STATUS
Definition: rpc.h:52
Definition: ps.c:97
#define RPC_S_SERVER_UNAVAILABLE
Definition: winerror.h:1033

Referenced by START_TEST().

◆ test_I_RpcMapWin32Status()

static void test_I_RpcMapWin32Status ( void  )
static

Definition at line 427 of file rpc.c.

428{
429 LONG win32status;
430 RPC_STATUS rpc_status;
431 BOOL w2k3_up = FALSE;
432
433 /* Windows 2003 and above return STATUS_UNSUCCESSFUL if given an unknown status */
434 win32status = I_RpcMapWin32Status(9999);
435 if (win32status == STATUS_UNSUCCESSFUL)
436 w2k3_up = TRUE;
437
438 /* On Windows XP-SP1 and below some statuses are not mapped and return
439 * the given status
440 */
441 for (rpc_status = 0; rpc_status < 10000; rpc_status++)
442 {
443 LONG expected_win32status;
444 BOOL missing = FALSE;
445
446 win32status = I_RpcMapWin32Status(rpc_status);
447 switch (rpc_status)
448 {
449 case ERROR_SUCCESS: expected_win32status = ERROR_SUCCESS; break;
450 case ERROR_ACCESS_DENIED: expected_win32status = STATUS_ACCESS_DENIED; break;
451 case ERROR_INVALID_HANDLE: expected_win32status = RPC_NT_SS_CONTEXT_MISMATCH; break;
452 case ERROR_OUTOFMEMORY: expected_win32status = STATUS_NO_MEMORY; break;
453 case ERROR_INVALID_PARAMETER: expected_win32status = STATUS_INVALID_PARAMETER; break;
454 case ERROR_INSUFFICIENT_BUFFER: expected_win32status = STATUS_BUFFER_TOO_SMALL; break;
455 case ERROR_MAX_THRDS_REACHED: expected_win32status = STATUS_NO_MEMORY; break;
456 case ERROR_NOACCESS: expected_win32status = STATUS_ACCESS_VIOLATION; break;
457 case ERROR_NOT_ENOUGH_SERVER_MEMORY: expected_win32status = STATUS_INSUFF_SERVER_RESOURCES; break;
458 case ERROR_WRONG_PASSWORD: expected_win32status = STATUS_WRONG_PASSWORD; missing = TRUE; break;
459 case ERROR_INVALID_LOGON_HOURS: expected_win32status = STATUS_INVALID_LOGON_HOURS; missing = TRUE; break;
460 case ERROR_PASSWORD_EXPIRED: expected_win32status = STATUS_PASSWORD_EXPIRED; missing = TRUE; break;
461 case ERROR_ACCOUNT_DISABLED: expected_win32status = STATUS_ACCOUNT_DISABLED; missing = TRUE; break;
462 case ERROR_INVALID_SECURITY_DESCR: expected_win32status = STATUS_INVALID_SECURITY_DESCR; break;
463 case RPC_S_INVALID_STRING_BINDING: expected_win32status = RPC_NT_INVALID_STRING_BINDING; break;
464 case RPC_S_WRONG_KIND_OF_BINDING: expected_win32status = RPC_NT_WRONG_KIND_OF_BINDING; break;
465 case RPC_S_INVALID_BINDING: expected_win32status = RPC_NT_INVALID_BINDING; break;
466 case RPC_S_PROTSEQ_NOT_SUPPORTED: expected_win32status = RPC_NT_PROTSEQ_NOT_SUPPORTED; break;
467 case RPC_S_INVALID_RPC_PROTSEQ: expected_win32status = RPC_NT_INVALID_RPC_PROTSEQ; break;
468 case RPC_S_INVALID_STRING_UUID: expected_win32status = RPC_NT_INVALID_STRING_UUID; break;
469 case RPC_S_INVALID_ENDPOINT_FORMAT: expected_win32status = RPC_NT_INVALID_ENDPOINT_FORMAT; break;
470 case RPC_S_INVALID_NET_ADDR: expected_win32status = RPC_NT_INVALID_NET_ADDR; break;
471 case RPC_S_NO_ENDPOINT_FOUND: expected_win32status = RPC_NT_NO_ENDPOINT_FOUND; break;
472 case RPC_S_INVALID_TIMEOUT: expected_win32status = RPC_NT_INVALID_TIMEOUT; break;
473 case RPC_S_OBJECT_NOT_FOUND: expected_win32status = RPC_NT_OBJECT_NOT_FOUND; break;
474 case RPC_S_ALREADY_REGISTERED: expected_win32status = RPC_NT_ALREADY_REGISTERED; break;
475 case RPC_S_TYPE_ALREADY_REGISTERED: expected_win32status = RPC_NT_TYPE_ALREADY_REGISTERED; break;
476 case RPC_S_ALREADY_LISTENING: expected_win32status = RPC_NT_ALREADY_LISTENING; break;
477 case RPC_S_NO_PROTSEQS_REGISTERED: expected_win32status = RPC_NT_NO_PROTSEQS_REGISTERED; break;
478 case RPC_S_NOT_LISTENING: expected_win32status = RPC_NT_NOT_LISTENING; break;
479 case RPC_S_UNKNOWN_MGR_TYPE: expected_win32status = RPC_NT_UNKNOWN_MGR_TYPE; break;
480 case RPC_S_UNKNOWN_IF: expected_win32status = RPC_NT_UNKNOWN_IF; break;
481 case RPC_S_NO_BINDINGS: expected_win32status = RPC_NT_NO_BINDINGS; break;
482 case RPC_S_NO_PROTSEQS: expected_win32status = RPC_NT_NO_PROTSEQS; break;
483 case RPC_S_CANT_CREATE_ENDPOINT: expected_win32status = RPC_NT_CANT_CREATE_ENDPOINT; break;
484 case RPC_S_OUT_OF_RESOURCES: expected_win32status = RPC_NT_OUT_OF_RESOURCES; break;
485 case RPC_S_SERVER_UNAVAILABLE: expected_win32status = RPC_NT_SERVER_UNAVAILABLE; break;
486 case RPC_S_SERVER_TOO_BUSY: expected_win32status = RPC_NT_SERVER_TOO_BUSY; break;
487 case RPC_S_INVALID_NETWORK_OPTIONS: expected_win32status = RPC_NT_INVALID_NETWORK_OPTIONS; break;
488 case RPC_S_NO_CALL_ACTIVE: expected_win32status = RPC_NT_NO_CALL_ACTIVE; break;
489 case RPC_S_CALL_FAILED: expected_win32status = RPC_NT_CALL_FAILED; break;
490 case RPC_S_CALL_FAILED_DNE: expected_win32status = RPC_NT_CALL_FAILED_DNE; break;
491 case RPC_S_PROTOCOL_ERROR: expected_win32status = RPC_NT_PROTOCOL_ERROR; break;
492 case RPC_S_UNSUPPORTED_TRANS_SYN: expected_win32status = RPC_NT_UNSUPPORTED_TRANS_SYN; break;
493 case RPC_S_UNSUPPORTED_TYPE: expected_win32status = RPC_NT_UNSUPPORTED_TYPE; break;
494 case RPC_S_INVALID_TAG: expected_win32status = RPC_NT_INVALID_TAG; break;
495 case RPC_S_INVALID_BOUND: expected_win32status = RPC_NT_INVALID_BOUND; break;
496 case RPC_S_NO_ENTRY_NAME: expected_win32status = RPC_NT_NO_ENTRY_NAME; break;
497 case RPC_S_INVALID_NAME_SYNTAX: expected_win32status = RPC_NT_INVALID_NAME_SYNTAX; break;
498 case RPC_S_UNSUPPORTED_NAME_SYNTAX: expected_win32status = RPC_NT_UNSUPPORTED_NAME_SYNTAX; break;
499 case RPC_S_UUID_NO_ADDRESS: expected_win32status = RPC_NT_UUID_NO_ADDRESS; break;
500 case RPC_S_DUPLICATE_ENDPOINT: expected_win32status = RPC_NT_DUPLICATE_ENDPOINT; break;
501 case RPC_S_UNKNOWN_AUTHN_TYPE: expected_win32status = RPC_NT_UNKNOWN_AUTHN_TYPE; break;
502 case RPC_S_MAX_CALLS_TOO_SMALL: expected_win32status = RPC_NT_MAX_CALLS_TOO_SMALL; break;
503 case RPC_S_STRING_TOO_LONG: expected_win32status = RPC_NT_STRING_TOO_LONG; break;
504 case RPC_S_PROTSEQ_NOT_FOUND: expected_win32status = RPC_NT_PROTSEQ_NOT_FOUND; break;
505 case RPC_S_PROCNUM_OUT_OF_RANGE: expected_win32status = RPC_NT_PROCNUM_OUT_OF_RANGE; break;
506 case RPC_S_BINDING_HAS_NO_AUTH: expected_win32status = RPC_NT_BINDING_HAS_NO_AUTH; break;
507 case RPC_S_UNKNOWN_AUTHN_SERVICE: expected_win32status = RPC_NT_UNKNOWN_AUTHN_SERVICE; break;
508 case RPC_S_UNKNOWN_AUTHN_LEVEL: expected_win32status = RPC_NT_UNKNOWN_AUTHN_LEVEL; break;
509 case RPC_S_INVALID_AUTH_IDENTITY: expected_win32status = RPC_NT_INVALID_AUTH_IDENTITY; break;
510 case RPC_S_UNKNOWN_AUTHZ_SERVICE: expected_win32status = RPC_NT_UNKNOWN_AUTHZ_SERVICE; break;
511 case EPT_S_INVALID_ENTRY: expected_win32status = EPT_NT_INVALID_ENTRY; break;
512 case EPT_S_CANT_PERFORM_OP: expected_win32status = EPT_NT_CANT_PERFORM_OP; break;
513 case EPT_S_NOT_REGISTERED: expected_win32status = EPT_NT_NOT_REGISTERED; break;
514 case EPT_S_CANT_CREATE: expected_win32status = EPT_NT_CANT_CREATE; break;
515 case RPC_S_NOTHING_TO_EXPORT: expected_win32status = RPC_NT_NOTHING_TO_EXPORT; break;
516 case RPC_S_INCOMPLETE_NAME: expected_win32status = RPC_NT_INCOMPLETE_NAME; break;
517 case RPC_S_INVALID_VERS_OPTION: expected_win32status = RPC_NT_INVALID_VERS_OPTION; break;
518 case RPC_S_NO_MORE_MEMBERS: expected_win32status = RPC_NT_NO_MORE_MEMBERS; break;
519 case RPC_S_NOT_ALL_OBJS_UNEXPORTED: expected_win32status = RPC_NT_NOT_ALL_OBJS_UNEXPORTED; break;
520 case RPC_S_INTERFACE_NOT_FOUND: expected_win32status = RPC_NT_INTERFACE_NOT_FOUND; break;
521 case RPC_S_ENTRY_ALREADY_EXISTS: expected_win32status = RPC_NT_ENTRY_ALREADY_EXISTS; break;
522 case RPC_S_ENTRY_NOT_FOUND: expected_win32status = RPC_NT_ENTRY_NOT_FOUND; break;
523 case RPC_S_NAME_SERVICE_UNAVAILABLE: expected_win32status = RPC_NT_NAME_SERVICE_UNAVAILABLE; break;
524 case RPC_S_INVALID_NAF_ID: expected_win32status = RPC_NT_INVALID_NAF_ID; break;
525 case RPC_S_CANNOT_SUPPORT: expected_win32status = RPC_NT_CANNOT_SUPPORT; break;
526 case RPC_S_NO_CONTEXT_AVAILABLE: expected_win32status = RPC_NT_NO_CONTEXT_AVAILABLE; break;
527 case RPC_S_INTERNAL_ERROR: expected_win32status = RPC_NT_INTERNAL_ERROR; break;
528 case RPC_S_ZERO_DIVIDE: expected_win32status = RPC_NT_ZERO_DIVIDE; break;
529 case RPC_S_ADDRESS_ERROR: expected_win32status = RPC_NT_ADDRESS_ERROR; break;
530 case RPC_S_FP_DIV_ZERO: expected_win32status = RPC_NT_FP_DIV_ZERO; break;
531 case RPC_S_FP_UNDERFLOW: expected_win32status = RPC_NT_FP_UNDERFLOW; break;
532 case RPC_S_FP_OVERFLOW: expected_win32status = RPC_NT_FP_OVERFLOW; break;
533 case RPC_S_CALL_IN_PROGRESS: expected_win32status = RPC_NT_CALL_IN_PROGRESS; break;
534 case RPC_S_NO_MORE_BINDINGS: expected_win32status = RPC_NT_NO_MORE_BINDINGS; break;
535 case RPC_S_CALL_CANCELLED: expected_win32status = RPC_NT_CALL_CANCELLED; missing = TRUE; break;
536 case RPC_S_INVALID_OBJECT: expected_win32status = RPC_NT_INVALID_OBJECT; break;
537 case RPC_S_INVALID_ASYNC_HANDLE: expected_win32status = RPC_NT_INVALID_ASYNC_HANDLE; missing = TRUE; break;
538 case RPC_S_INVALID_ASYNC_CALL: expected_win32status = RPC_NT_INVALID_ASYNC_CALL; missing = TRUE; break;
539 case RPC_S_GROUP_MEMBER_NOT_FOUND: expected_win32status = RPC_NT_GROUP_MEMBER_NOT_FOUND; break;
540 case RPC_X_NO_MORE_ENTRIES: expected_win32status = RPC_NT_NO_MORE_ENTRIES; break;
541 case RPC_X_SS_CHAR_TRANS_OPEN_FAIL: expected_win32status = RPC_NT_SS_CHAR_TRANS_OPEN_FAIL; break;
542 case RPC_X_SS_CHAR_TRANS_SHORT_FILE: expected_win32status = RPC_NT_SS_CHAR_TRANS_SHORT_FILE; break;
543 case RPC_X_SS_IN_NULL_CONTEXT: expected_win32status = RPC_NT_SS_IN_NULL_CONTEXT; break;
544 case RPC_X_SS_CONTEXT_DAMAGED: expected_win32status = RPC_NT_SS_CONTEXT_DAMAGED; break;
545 case RPC_X_SS_HANDLES_MISMATCH: expected_win32status = RPC_NT_SS_HANDLES_MISMATCH; break;
546 case RPC_X_SS_CANNOT_GET_CALL_HANDLE: expected_win32status = RPC_NT_SS_CANNOT_GET_CALL_HANDLE; break;
547 case RPC_X_NULL_REF_POINTER: expected_win32status = RPC_NT_NULL_REF_POINTER; break;
548 case RPC_X_ENUM_VALUE_OUT_OF_RANGE: expected_win32status = RPC_NT_ENUM_VALUE_OUT_OF_RANGE; break;
549 case RPC_X_BYTE_COUNT_TOO_SMALL: expected_win32status = RPC_NT_BYTE_COUNT_TOO_SMALL; break;
550 case RPC_X_BAD_STUB_DATA: expected_win32status = RPC_NT_BAD_STUB_DATA; break;
551 case RPC_X_PIPE_CLOSED: expected_win32status = RPC_NT_PIPE_CLOSED; missing = TRUE; break;
552 case RPC_X_PIPE_DISCIPLINE_ERROR: expected_win32status = RPC_NT_PIPE_DISCIPLINE_ERROR; missing = TRUE; break;
553 case RPC_X_PIPE_EMPTY: expected_win32status = RPC_NT_PIPE_EMPTY; missing = TRUE; break;
554 case ERROR_PASSWORD_MUST_CHANGE: expected_win32status = STATUS_PASSWORD_MUST_CHANGE; missing = TRUE; break;
555 case ERROR_ACCOUNT_LOCKED_OUT: expected_win32status = STATUS_ACCOUNT_LOCKED_OUT; missing = TRUE; break;
556 default:
557 if (w2k3_up)
558 expected_win32status = STATUS_UNSUCCESSFUL;
559 else
560 expected_win32status = rpc_status;
561 }
562
563 ok(win32status == expected_win32status ||
564 broken(missing && win32status == rpc_status),
565 "I_RpcMapWin32Status(%d) should have returned 0x%x instead of 0x%x%s\n",
566 rpc_status, expected_win32status, win32status,
567 broken(missing) ? " (or have returned with the given status)" : "");
568 }
569}
#define STATUS_NO_MEMORY
Definition: d3dkmdt.h:51
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define ERROR_SUCCESS
Definition: deptool.c:10
#define TRUE
Definition: types.h:120
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
#define RPC_NT_INVALID_NAF_ID
Definition: ntstatus.h:1239
#define EPT_NT_INVALID_ENTRY
Definition: ntstatus.h:1227
#define RPC_NT_SERVER_UNAVAILABLE
Definition: ntstatus.h:1201
#define RPC_NT_UNSUPPORTED_TYPE
Definition: ntstatus.h:1209
#define STATUS_WRONG_PASSWORD
Definition: ntstatus.h:342
#define RPC_NT_INTERFACE_NOT_FOUND
Definition: ntstatus.h:1235
#define RPC_NT_INVALID_NETWORK_OPTIONS
Definition: ntstatus.h:1203
#define RPC_NT_INVALID_RPC_PROTSEQ
Definition: ntstatus.h:1183
#define RPC_NT_BAD_STUB_DATA
Definition: ntstatus.h:1276
#define STATUS_INVALID_LOGON_HOURS
Definition: ntstatus.h:347
#define RPC_NT_INTERNAL_ERROR
Definition: ntstatus.h:1242
#define RPC_NT_UNKNOWN_AUTHN_LEVEL
Definition: ntstatus.h:1224
#define RPC_NT_SS_IN_NULL_CONTEXT
Definition: ntstatus.h:1268
#define RPC_NT_ENUM_VALUE_OUT_OF_RANGE
Definition: ntstatus.h:1274
#define RPC_NT_PIPE_CLOSED
Definition: ntstatus.h:1283
#define RPC_NT_ENTRY_ALREADY_EXISTS
Definition: ntstatus.h:1236
#define RPC_NT_DUPLICATE_ENDPOINT
Definition: ntstatus.h:1216
#define RPC_NT_CALL_IN_PROGRESS
Definition: ntstatus.h:1248
#define RPC_NT_NO_CALL_ACTIVE
Definition: ntstatus.h:1204
#define RPC_NT_NO_ENDPOINT_FOUND
Definition: ntstatus.h:1187
#define RPC_NT_STRING_TOO_LONG
Definition: ntstatus.h:1219
#define RPC_NT_PROCNUM_OUT_OF_RANGE
Definition: ntstatus.h:1221
#define STATUS_ACCOUNT_DISABLED
Definition: ntstatus.h:350
#define RPC_NT_PIPE_EMPTY
Definition: ntstatus.h:1285
#define RPC_NT_NO_MORE_ENTRIES
Definition: ntstatus.h:1265
#define STATUS_PASSWORD_MUST_CHANGE
Definition: ntstatus.h:680
#define RPC_NT_BYTE_COUNT_TOO_SMALL
Definition: ntstatus.h:1275
#define RPC_NT_SS_CONTEXT_MISMATCH
Definition: ntstatus.h:1269
#define RPC_NT_WRONG_KIND_OF_BINDING
Definition: ntstatus.h:1180
#define RPC_NT_ALREADY_REGISTERED
Definition: ntstatus.h:1190
#define EPT_NT_NOT_REGISTERED
Definition: ntstatus.h:1229
#define RPC_NT_INVALID_ASYNC_HANDLE
Definition: ntstatus.h:1262
#define RPC_NT_INVALID_NAME_SYNTAX
Definition: ntstatus.h:1213
#define RPC_NT_NOTHING_TO_EXPORT
Definition: ntstatus.h:1230
#define RPC_NT_UNKNOWN_IF
Definition: ntstatus.h:1196
#define RPC_NT_PROTOCOL_ERROR
Definition: ntstatus.h:1207
#define RPC_NT_ENTRY_NOT_FOUND
Definition: ntstatus.h:1237
#define RPC_NT_NO_PROTSEQS_REGISTERED
Definition: ntstatus.h:1193
#define RPC_NT_NULL_REF_POINTER
Definition: ntstatus.h:1273
#define RPC_NT_GROUP_MEMBER_NOT_FOUND
Definition: ntstatus.h:1250
#define RPC_NT_SS_CHAR_TRANS_OPEN_FAIL
Definition: ntstatus.h:1266
#define RPC_NT_UNSUPPORTED_TRANS_SYN
Definition: ntstatus.h:1208
#define RPC_NT_INVALID_STRING_UUID
Definition: ntstatus.h:1184
#define RPC_NT_NOT_LISTENING
Definition: ntstatus.h:1194
#define RPC_NT_OBJECT_NOT_FOUND
Definition: ntstatus.h:1189
#define STATUS_INSUFF_SERVER_RESOURCES
Definition: ntstatus.h:649
#define RPC_NT_INVALID_AUTH_IDENTITY
Definition: ntstatus.h:1225
#define RPC_NT_INVALID_ASYNC_CALL
Definition: ntstatus.h:1263
#define RPC_NT_SS_CHAR_TRANS_SHORT_FILE
Definition: ntstatus.h:1267
#define RPC_NT_PROTSEQ_NOT_FOUND
Definition: ntstatus.h:1220
#define RPC_NT_SS_CANNOT_GET_CALL_HANDLE
Definition: ntstatus.h:1272
#define RPC_NT_NO_ENTRY_NAME
Definition: ntstatus.h:1212
#define RPC_NT_CALL_CANCELLED
Definition: ntstatus.h:1254
#define RPC_NT_TYPE_ALREADY_REGISTERED
Definition: ntstatus.h:1191
#define RPC_NT_UUID_NO_ADDRESS
Definition: ntstatus.h:1215
#define RPC_NT_OUT_OF_RESOURCES
Definition: ntstatus.h:1200
#define STATUS_INVALID_SECURITY_DESCR
Definition: ntstatus.h:357
#define RPC_NT_NO_CONTEXT_AVAILABLE
Definition: ntstatus.h:1241
#define RPC_NT_PIPE_DISCIPLINE_ERROR
Definition: ntstatus.h:1284
#define RPC_NT_MAX_CALLS_TOO_SMALL
Definition: ntstatus.h:1218
#define RPC_NT_INVALID_STRING_BINDING
Definition: ntstatus.h:1179
#define RPC_NT_NO_PROTSEQS
Definition: ntstatus.h:1198
#define RPC_NT_SS_HANDLES_MISMATCH
Definition: ntstatus.h:1271
#define STATUS_PASSWORD_EXPIRED
Definition: ntstatus.h:349
#define STATUS_ACCESS_VIOLATION
Definition: ntstatus.h:242
#define RPC_NT_NO_BINDINGS
Definition: ntstatus.h:1197
#define RPC_NT_FP_DIV_ZERO
Definition: ntstatus.h:1245
#define RPC_NT_FP_UNDERFLOW
Definition: ntstatus.h:1246
#define RPC_NT_INCOMPLETE_NAME
Definition: ntstatus.h:1231
#define RPC_NT_SS_CONTEXT_DAMAGED
Definition: ntstatus.h:1270
#define RPC_NT_SERVER_TOO_BUSY
Definition: ntstatus.h:1202
#define RPC_NT_FP_OVERFLOW
Definition: ntstatus.h:1247
#define RPC_NT_UNKNOWN_AUTHN_SERVICE
Definition: ntstatus.h:1223
#define RPC_NT_INVALID_TIMEOUT
Definition: ntstatus.h:1188
#define RPC_NT_CANNOT_SUPPORT
Definition: ntstatus.h:1240
#define RPC_NT_PROTSEQ_NOT_SUPPORTED
Definition: ntstatus.h:1182
#define RPC_NT_INVALID_NET_ADDR
Definition: ntstatus.h:1186
#define RPC_NT_INVALID_BOUND
Definition: ntstatus.h:1211
#define RPC_NT_NO_MORE_BINDINGS
Definition: ntstatus.h:1249
#define RPC_NT_INVALID_OBJECT
Definition: ntstatus.h:1252
#define RPC_NT_ZERO_DIVIDE
Definition: ntstatus.h:1243
#define RPC_NT_UNKNOWN_AUTHZ_SERVICE
Definition: ntstatus.h:1226
#define RPC_NT_BINDING_HAS_NO_AUTH
Definition: ntstatus.h:1222
#define RPC_NT_INVALID_BINDING
Definition: ntstatus.h:1181
#define RPC_NT_UNSUPPORTED_NAME_SYNTAX
Definition: ntstatus.h:1214
#define RPC_NT_UNKNOWN_MGR_TYPE
Definition: ntstatus.h:1195
#define RPC_NT_CANT_CREATE_ENDPOINT
Definition: ntstatus.h:1199
#define STATUS_ACCOUNT_LOCKED_OUT
Definition: ntstatus.h:696
#define RPC_NT_NAME_SERVICE_UNAVAILABLE
Definition: ntstatus.h:1238
#define EPT_NT_CANT_PERFORM_OP
Definition: ntstatus.h:1228
#define RPC_NT_NOT_ALL_OBJS_UNEXPORTED
Definition: ntstatus.h:1234
#define RPC_NT_NO_MORE_MEMBERS
Definition: ntstatus.h:1233
#define RPC_NT_INVALID_ENDPOINT_FORMAT
Definition: ntstatus.h:1185
#define RPC_NT_ALREADY_LISTENING
Definition: ntstatus.h:1192
#define RPC_NT_UNKNOWN_AUTHN_TYPE
Definition: ntstatus.h:1217
#define EPT_NT_CANT_CREATE
Definition: ntstatus.h:1251
#define RPC_NT_ADDRESS_ERROR
Definition: ntstatus.h:1244
#define RPC_NT_CALL_FAILED
Definition: ntstatus.h:1205
#define RPC_NT_CALL_FAILED_DNE
Definition: ntstatus.h:1206
#define RPC_NT_INVALID_TAG
Definition: ntstatus.h:1210
#define RPC_NT_INVALID_VERS_OPTION
Definition: ntstatus.h:1232
long LONG
Definition: pedump.c:60
LONG WINAPI I_RpcMapWin32Status(RPC_STATUS status)
Definition: rpcrt4_main.c:740
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
#define STATUS_ACCESS_DENIED
Definition: udferr_usr.h:145
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define RPC_S_SERVER_TOO_BUSY
Definition: winerror.h:1034
#define EPT_S_INVALID_ENTRY
Definition: winerror.h:1059
#define RPC_S_PROTSEQ_NOT_SUPPORTED
Definition: winerror.h:1014
#define RPC_S_TYPE_ALREADY_REGISTERED
Definition: winerror.h:1023
#define RPC_S_NOTHING_TO_EXPORT
Definition: winerror.h:1062
#define RPC_S_NO_MORE_MEMBERS
Definition: winerror.h:1065
#define ERROR_INVALID_SECURITY_DESCR
Definition: winerror.h:820
#define RPC_S_CALL_IN_PROGRESS
Definition: winerror.h:1098
#define RPC_S_OUT_OF_RESOURCES
Definition: winerror.h:1032
#define RPC_S_CALL_FAILED_DNE
Definition: winerror.h:1038
#define RPC_S_ADDRESS_ERROR
Definition: winerror.h:1076
#define RPC_S_INVALID_NAME_SYNTAX
Definition: winerror.h:1045
#define RPC_X_SS_HANDLES_MISMATCH
Definition: winerror.h:1085
#define ERROR_INVALID_LOGON_HOURS
Definition: winerror.h:810
#define EPT_S_NOT_REGISTERED
Definition: winerror.h:1061
#define RPC_S_UNSUPPORTED_TRANS_SYN
Definition: winerror.h:1040
#define RPC_S_INVALID_BOUND
Definition: winerror.h:1043
#define RPC_S_CALL_FAILED
Definition: winerror.h:1037
#define RPC_S_WRONG_KIND_OF_BINDING
Definition: winerror.h:1012
#define RPC_S_NO_CALL_ACTIVE
Definition: winerror.h:1036
#define RPC_S_INVALID_STRING_BINDING
Definition: winerror.h:1011
#define RPC_S_ENTRY_ALREADY_EXISTS
Definition: winerror.h:1068
#define RPC_S_INVALID_TAG
Definition: winerror.h:1042
#define RPC_S_INVALID_ASYNC_CALL
Definition: winerror.h:1157
#define EPT_S_CANT_PERFORM_OP
Definition: winerror.h:1060
#define RPC_S_NOT_ALL_OBJS_UNEXPORTED
Definition: winerror.h:1066
#define RPC_X_ENUM_VALUE_OUT_OF_RANGE
Definition: winerror.h:1088
#define RPC_S_ALREADY_LISTENING
Definition: winerror.h:1024
#define RPC_X_SS_IN_NULL_CONTEXT
Definition: winerror.h:1083
#define RPC_S_INVALID_AUTH_IDENTITY
Definition: winerror.h:1057
#define RPC_S_FP_DIV_ZERO
Definition: winerror.h:1077
#define RPC_X_PIPE_DISCIPLINE_ERROR
Definition: winerror.h:1159
#define RPC_S_NAME_SERVICE_UNAVAILABLE
Definition: winerror.h:1070
#define RPC_S_UNSUPPORTED_TYPE
Definition: winerror.h:1041
#define RPC_S_UNKNOWN_IF
Definition: winerror.h:1028
#define RPC_X_BAD_STUB_DATA
Definition: winerror.h:1090
#define RPC_S_BINDING_HAS_NO_AUTH
Definition: winerror.h:1054
#define RPC_S_NO_MORE_BINDINGS
Definition: winerror.h:1113
#define RPC_S_OBJECT_NOT_FOUND
Definition: winerror.h:1021
#define RPC_S_CANT_CREATE_ENDPOINT
Definition: winerror.h:1031
#define RPC_S_INVALID_STRING_UUID
Definition: winerror.h:1016
#define RPC_S_CANNOT_SUPPORT
Definition: winerror.h:1072
#define RPC_S_INVALID_ASYNC_HANDLE
Definition: winerror.h:1156
#define RPC_X_SS_CHAR_TRANS_OPEN_FAIL
Definition: winerror.h:1081
#define RPC_S_INVALID_NAF_ID
Definition: winerror.h:1071
#define RPC_S_FP_UNDERFLOW
Definition: winerror.h:1078
#define RPC_S_CALL_CANCELLED
Definition: winerror.h:1125
#define RPC_X_NO_MORE_ENTRIES
Definition: winerror.h:1080
#define RPC_S_PROTOCOL_ERROR
Definition: winerror.h:1039
#define RPC_S_NO_BINDINGS
Definition: winerror.h:1029
#define RPC_X_NULL_REF_POINTER
Definition: winerror.h:1087
#define RPC_S_INVALID_TIMEOUT
Definition: winerror.h:1020
#define RPC_X_PIPE_CLOSED
Definition: winerror.h:1158
#define RPC_S_ZERO_DIVIDE
Definition: winerror.h:1075
#define RPC_S_ENTRY_NOT_FOUND
Definition: winerror.h:1069
#define RPC_X_PIPE_EMPTY
Definition: winerror.h:1160
#define RPC_S_NO_CONTEXT_AVAILABLE
Definition: winerror.h:1073
#define RPC_S_UNKNOWN_AUTHN_TYPE
Definition: winerror.h:1049
#define RPC_S_NO_ENDPOINT_FOUND
Definition: winerror.h:1019
#define EPT_S_CANT_CREATE
Definition: winerror.h:1141
#define RPC_S_GROUP_MEMBER_NOT_FOUND
Definition: winerror.h:1140
#define ERROR_ACCOUNT_LOCKED_OUT
Definition: winerror.h:1151
#define RPC_S_UNKNOWN_AUTHN_LEVEL
Definition: winerror.h:1056
#define RPC_S_INVALID_VERS_OPTION
Definition: winerror.h:1064
#define RPC_S_NOT_LISTENING
Definition: winerror.h:1026
#define RPC_S_UNSUPPORTED_NAME_SYNTAX
Definition: winerror.h:1046
#define ERROR_ACCOUNT_DISABLED
Definition: winerror.h:813
#define RPC_S_UNKNOWN_AUTHN_SERVICE
Definition: winerror.h:1055
#define RPC_X_SS_CANNOT_GET_CALL_HANDLE
Definition: winerror.h:1086
#define RPC_X_BYTE_COUNT_TOO_SMALL
Definition: winerror.h:1089
#define ERROR_WRONG_PASSWORD
Definition: winerror.h:805
#define ERROR_PASSWORD_MUST_CHANGE
Definition: winerror.h:1149
#define RPC_S_INCOMPLETE_NAME
Definition: winerror.h:1063
#define RPC_S_NO_PROTSEQS
Definition: winerror.h:1030
#define RPC_S_PROTSEQ_NOT_FOUND
Definition: winerror.h:1052
#define ERROR_MAX_THRDS_REACHED
Definition: winerror.h:235
#define RPC_S_STRING_TOO_LONG
Definition: winerror.h:1051
#define RPC_S_INTERNAL_ERROR
Definition: winerror.h:1074
#define RPC_X_SS_CONTEXT_DAMAGED
Definition: winerror.h:1084
#define RPC_S_INVALID_NETWORK_OPTIONS
Definition: winerror.h:1035
#define ERROR_PASSWORD_EXPIRED
Definition: winerror.h:812
#define RPC_S_ALREADY_REGISTERED
Definition: winerror.h:1022
#define RPC_S_INVALID_NET_ADDR
Definition: winerror.h:1018
#define RPC_S_INTERFACE_NOT_FOUND
Definition: winerror.h:1067
#define RPC_S_INVALID_ENDPOINT_FORMAT
Definition: winerror.h:1017
#define RPC_S_INVALID_BINDING
Definition: winerror.h:1013
#define RPC_S_INVALID_OBJECT
Definition: winerror.h:1142
#define RPC_S_UUID_NO_ADDRESS
Definition: winerror.h:1047
#define RPC_S_DUPLICATE_ENDPOINT
Definition: winerror.h:1048
#define ERROR_NOACCESS
Definition: winerror.h:578
#define RPC_S_MAX_CALLS_TOO_SMALL
Definition: winerror.h:1050
#define RPC_S_INVALID_RPC_PROTSEQ
Definition: winerror.h:1015
#define RPC_S_NO_ENTRY_NAME
Definition: winerror.h:1044
#define RPC_S_UNKNOWN_AUTHZ_SERVICE
Definition: winerror.h:1058
#define RPC_S_PROCNUM_OUT_OF_RANGE
Definition: winerror.h:1053
#define RPC_X_SS_CHAR_TRANS_SHORT_FILE
Definition: winerror.h:1082
#define RPC_S_FP_OVERFLOW
Definition: winerror.h:1079
#define RPC_S_UNKNOWN_MGR_TYPE
Definition: winerror.h:1027
#define RPC_S_NO_PROTSEQS_REGISTERED
Definition: winerror.h:1025
#define ERROR_NOT_ENOUGH_SERVER_MEMORY
Definition: winerror.h:666

Referenced by START_TEST().

◆ test_rpc_ncacn_ip_tcp()

static void test_rpc_ncacn_ip_tcp ( void  )
static

Definition at line 210 of file rpc.c.

211{
213 unsigned char *binding, *principal;
214 handle_t IFoo_IfHandle;
215 ULONG level, authnsvc, authzsvc;
217 static unsigned char foo[] = "foo";
218 static unsigned char ncacn_ip_tcp[] = "ncacn_ip_tcp";
219 static unsigned char address[] = "127.0.0.1";
220 static unsigned char endpoint[] = "4114";
221 static unsigned char spn[] = "principal";
222
224 ok(status == RPC_S_INVALID_RPC_PROTSEQ, "return wrong\n");
225
226 status = RpcNetworkIsProtseqValidA(ncacn_ip_tcp);
227 ok(status == RPC_S_OK, "return wrong\n");
228
231 "wrong RpcMgmtStopServerListening error (%u)\n", status);
232
235 "wrong RpcMgmtWaitServerListen error status (%u)\n", status);
236
237 status = RpcServerListen(1, 20, FALSE);
239 "wrong RpcServerListen error (%u)\n", status);
240
241 status = RpcServerUseProtseqEpA(ncacn_ip_tcp, 20, endpoint, NULL);
242 ok(status == RPC_S_OK, "RpcServerUseProtseqEp failed (%u)\n", status);
243
245 ok(status == RPC_S_OK, "RpcServerRegisterIf failed (%u)\n", status);
246
247 status = RpcServerListen(1, 20, TRUE);
248 ok(status == RPC_S_OK, "RpcServerListen failed (%u)\n", status);
249
250 status = RpcServerListen(1, 20, TRUE);
252 "wrong RpcServerListen error (%u)\n", status);
253
255 endpoint, NULL, &binding);
256 ok(status == RPC_S_OK, "RpcStringBindingCompose failed (%u)\n", status);
257
258 status = RpcBindingFromStringBindingA(binding, &IFoo_IfHandle);
259 ok(status == RPC_S_OK, "RpcBindingFromStringBinding failed (%u)\n",
260 status);
261
264 ok(status == RPC_S_OK, "RpcBindingSetAuthInfo failed (%u)\n", status);
265
266 status = RpcBindingInqAuthInfoA(IFoo_IfHandle, NULL, NULL, NULL, NULL, NULL);
267 ok(status == RPC_S_BINDING_HAS_NO_AUTH, "RpcBindingInqAuthInfo failed (%u)\n",
268 status);
269
272 ok(status == RPC_S_OK, "RpcBindingSetAuthInfo failed (%u)\n", status);
273
274 level = authnsvc = authzsvc = 0;
275 principal = (unsigned char *)0xdeadbeef;
276 identity = (RPC_AUTH_IDENTITY_HANDLE *)0xdeadbeef;
277 status = RpcBindingInqAuthInfoA(IFoo_IfHandle, &principal, &level, &authnsvc,
278 &identity, &authzsvc);
279
280 ok(status == RPC_S_OK, "RpcBindingInqAuthInfo failed (%u)\n", status);
281 ok(identity == NULL, "expected NULL identity, got %p\n", identity);
282 ok(principal != (unsigned char *)0xdeadbeef, "expected valid principal, got %p\n", principal);
283 ok(level == RPC_C_AUTHN_LEVEL_PKT_PRIVACY, "expected RPC_C_AUTHN_LEVEL_PKT_PRIVACY, got %d\n", level);
284 ok(authnsvc == RPC_C_AUTHN_WINNT, "expected RPC_C_AUTHN_WINNT, got %d\n", authnsvc);
285 todo_wine ok(authzsvc == RPC_C_AUTHZ_NAME, "expected RPC_C_AUTHZ_NAME, got %d\n", authzsvc);
286 if (status == RPC_S_OK) RpcStringFreeA(&principal);
287
289 ok(status == RPC_S_OK, "RpcMgmtStopServerListening failed (%u)\n",
290 status);
291
293 ok(status == RPC_S_OK, "RpcMgmtStopServerListening failed (%u)\n",
294 status);
295
297 ok(status == RPC_S_OK, "RpcServerUnregisterIf failed (%u)\n", status);
298
300 ok(status == RPC_S_OK, "RpcMgmtWaitServerListen failed (%u)\n", status);
301
302 status = RpcStringFreeA(&binding);
303 ok(status == RPC_S_OK, "RpcStringFree failed (%u)\n", status);
304
305 status = RpcBindingFree(&IFoo_IfHandle);
306 ok(status == RPC_S_OK, "RpcBindingFree failed (%u)\n", status);
307}
GLint level
Definition: gl.h:1546
#define todo_wine
Definition: custom.c:89
RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingSetAuthInfoA(RPC_BINDING_HANDLE Binding, RPC_CSTR ServerPrincName, ULONG AuthnLevel, ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr)
Definition: rpc_binding.c:1933
RPCRTAPI RPC_STATUS RPC_ENTRY RpcBindingInqAuthInfoA(RPC_BINDING_HANDLE Binding, RPC_CSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc)
Definition: rpc_binding.c:1550
RPC_STATUS WINAPI RpcServerListen(UINT MinimumCallThreads, UINT MaxCalls, UINT DontWait)
Definition: rpc_server.c:1520
RPC_STATUS WINAPI RpcMgmtWaitServerListen(void)
Definition: rpc_server.c:1539
RPC_STATUS WINAPI RpcServerUseProtseqEpA(RPC_CSTR Protseq, UINT MaxCalls, RPC_CSTR Endpoint, LPVOID SecurityDescriptor)
Definition: rpc_server.c:910
RPC_STATUS WINAPI RpcMgmtStopServerListening(RPC_BINDING_HANDLE Binding)
Definition: rpc_server.c:1596
RPC_STATUS WINAPI RpcNetworkIsProtseqValidA(RPC_CSTR protseq)
#define RPC_C_AUTHZ_NAME
Definition: rpcdce.h:168
#define RPC_C_AUTHN_LEVEL_PKT_PRIVACY
Definition: rpcdce.h:151
#define RPC_C_AUTHN_LEVEL_NONE
Definition: rpcdce.h:146
#define RPC_C_AUTHN_WINNT
Definition: rpcdce.h:158
Definition: nis.h:10
uint32_t ULONG
Definition: typedefs.h:59

Referenced by START_TEST().

◆ test_RpcBindingFree()

static void test_RpcBindingFree ( void  )
static

Definition at line 843 of file rpc.c.

844{
845 RPC_BINDING_HANDLE binding = NULL;
847
848 status = RpcBindingFree(&binding);
850 "RpcBindingFree should have returned RPC_S_INVALID_BINDING instead of %d\n",
851 status);
852}

Referenced by START_TEST().

◆ test_RpcExceptionFilter()

static void test_RpcExceptionFilter ( const char func_name)
static

Definition at line 649 of file rpc.c.

650{
652 int retval;
653 int (WINAPI *pRpcExceptionFilter)(ULONG) = (void *)GetProcAddress(GetModuleHandleA("rpcrt4.dll"), func_name);
654
655 if (!pRpcExceptionFilter)
656 {
657 win_skip("%s not exported\n", func_name);
658 return;
659 }
660
662 {
663 /* skip over uninteresting bits of the number space */
664 if (exception == 2000) exception = 0x40000000;
665 if (exception == 0x40000005) exception = 0x80000000;
666 if (exception == 0x80000005) exception = 0xc0000000;
667
668 retval = pRpcExceptionFilter(exception);
669 switch (exception)
670 {
679 ok(retval == EXCEPTION_CONTINUE_SEARCH, "%s(0x%x) should have returned %d instead of %d\n",
681 break;
685 trace("%s(0x%x) returned %d\n", func_name, exception, retval);
686 break;
687 default:
688 ok(retval == EXCEPTION_EXECUTE_HANDLER, "%s(0x%x) should have returned %d instead of %d\n",
690 }
691 }
692}
#define trace
Definition: atltest.h:70
#define STATUS_ILLEGAL_INSTRUCTION
Definition: d3dkmdt.h:41
#define GetProcAddress(x, y)
Definition: compat.h:753
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define exception
Definition: math.h:26
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:90
#define EXCEPTION_CONTINUE_SEARCH
Definition: excpt.h:91
#define STATUS_REG_NAT_CONSUMPTION
Definition: ntstatus.h:821
#define STATUS_POSSIBLE_DEADLOCK
Definition: ntstatus.h:637
#define STATUS_INSTRUCTION_MISALIGNMENT
Definition: ntstatus.h:406
#define STATUS_STACK_OVERFLOW
Definition: ntstatus.h:489
#define STATUS_PRIVILEGED_INSTRUCTION
Definition: ntstatus.h:386
#define STATUS_BREAKPOINT
Definition: ntstatus.h:184
#define STATUS_IN_PAGE_ERROR
Definition: ntstatus.h:243
#define STATUS_HANDLE_NOT_CLOSABLE
Definition: ntstatus.h:697
#define STATUS_DATATYPE_MISALIGNMENT
Definition: ntstatus.h:183
#define STATUS_GUARD_PAGE_VIOLATION
Definition: ntstatus.h:182
void func_name(void)
#define win_skip
Definition: test.h:163
#define WINAPI
Definition: msvc.h:6

Referenced by START_TEST().

◆ test_RpcServerInqDefaultPrincName()

static void test_RpcServerInqDefaultPrincName ( void  )
static

Definition at line 870 of file rpc.c.

871{
873 RPC_CSTR principal, saved_principal;
874 char *username;
875 ULONG len = 0;
876
877 GetUserNameExA( NameSamCompatible, NULL, &len );
879 GetUserNameExA( NameSamCompatible, username, &len );
880
882 ok( ret == RPC_S_UNKNOWN_AUTHN_SERVICE, "got %u\n", ret );
883
885 ok( ret == RPC_S_UNKNOWN_AUTHN_SERVICE, "got %u\n", ret );
886
887 principal = (RPC_CSTR)0xdeadbeef;
889 ok( ret == RPC_S_UNKNOWN_AUTHN_SERVICE, "got %u\n", ret );
890 ok( principal == (RPC_CSTR)0xdeadbeef, "got unexpected principal\n" );
891
892 saved_principal = (RPC_CSTR)0xdeadbeef;
894 ok( ret == RPC_S_OK, "got %u\n", ret );
895 ok( saved_principal != (RPC_CSTR)0xdeadbeef, "expected valid principal\n" );
896 ok( !strcmp( (const char *)saved_principal, username ), "got \'%s\'\n", saved_principal );
897 trace("%s\n", saved_principal);
898
900 ok( ret == RPC_S_OK, "got %u\n", ret );
901
902 principal = (RPC_CSTR)0xdeadbeef;
904 ok( ret == RPC_S_OK, "got %u\n", ret );
905 ok( principal != (RPC_CSTR)0xdeadbeef, "expected valid principal\n" );
906 ok( !strcmp( (const char *)principal, username ), "got \'%s\'\n", principal );
907 RpcStringFreeA( &principal );
908
910 ok( ret == RPC_S_OK, "got %u\n", ret );
911
912 RpcStringFreeA( &saved_principal );
914}
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
GLenum GLsizei len
Definition: glext.h:6722
static WCHAR username[]
Definition: url.c:32
RPC_STATUS RPC_ENTRY RpcServerInqDefaultPrincNameA(ULONG AuthnSvc, RPC_CSTR *PrincName)
Definition: rpc_server.c:1481
RPC_STATUS WINAPI RpcServerRegisterAuthInfoA(RPC_CSTR ServerPrincName, ULONG AuthnSvc, RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn, LPVOID Arg)
Definition: rpc_server.c:1414
#define RPC_C_AUTHN_DEFAULT
Definition: rpcdce.h:165
unsigned char * RPC_CSTR
Definition: rpcdce.h:45
BOOLEAN WINAPI GetUserNameExA(EXTENDED_NAME_FORMAT NameFormat, LPSTR lpNameBuffer, PULONG nSize)
Definition: sspi.c:1044

Referenced by START_TEST().

◆ test_RpcServerRegisterAuthInfo()

static void test_RpcServerRegisterAuthInfo ( void  )
static

Definition at line 916 of file rpc.c.

917{
919
921 ok(status == RPC_S_UNKNOWN_AUTHN_SERVICE, "status = %x\n", status);
922}
RPC_STATUS WINAPI RpcServerRegisterAuthInfoW(RPC_WSTR ServerPrincName, ULONG AuthnSvc, RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn, LPVOID Arg)
Definition: rpc_server.c:1434

Referenced by START_TEST().

◆ test_RpcServerUseProtseq()

static void test_RpcServerUseProtseq ( void  )
static

Definition at line 924 of file rpc.c.

925{
927 RPC_BINDING_VECTOR *bindings;
928 ULONG i;
929 ULONG binding_count_before;
930 ULONG binding_count_after1;
931 ULONG binding_count_after2;
932 ULONG endpoints_registered = 0;
933 static unsigned char iptcp[] = "ncacn_ip_tcp";
934 static unsigned char np[] = "ncacn_np";
935 static unsigned char ncalrpc[] = "ncalrpc";
936 BOOL iptcp_registered = FALSE, np_registered = FALSE, ncalrpc_registered = FALSE;
937
938 status = RpcServerInqBindings(&bindings);
940 binding_count_before = 0;
941 else
942 {
943 binding_count_before = bindings->Count;
944 ok(status == RPC_S_OK, "RpcServerInqBindings failed with status %d\n", status);
945 for (i = 0; i < bindings->Count; i++)
946 {
947 RPC_CSTR str_bind;
948 status = RpcBindingToStringBindingA(bindings->BindingH[i], &str_bind);
949 ok(status == RPC_S_OK, "RpcBindingToStringBinding failed with status %d\n", status);
950 if (lstrlenA((const char *)str_bind) > 12 && !memcmp(str_bind, "ncacn_ip_tcp", 12))
951 iptcp_registered = TRUE;
952 if (lstrlenA((const char *)str_bind) > 8 && !memcmp(str_bind, "ncacn_np", 8))
953 np_registered = TRUE;
954 if (lstrlenA((const char *)str_bind) > 7 && !memcmp(str_bind, "ncalrpc", 7))
955 ncalrpc_registered = TRUE;
956 RpcStringFreeA(&str_bind);
957 }
958 RpcBindingVectorFree(&bindings);
959 }
960
961 /* show that RpcServerUseProtseqEp(..., NULL, ...) is the same as
962 * RpcServerUseProtseq(...) */
963 status = RpcServerUseProtseqEpA(ncalrpc, 0, NULL, NULL);
965 "RpcServerUseProtseqEp with NULL endpoint failed with status %d\n",
966 status);
967
968 /* register protocol sequences without explicit endpoints */
971 win_skip("ncacn_np not supported\n");
972 else
973 ok(status == RPC_S_OK, "RpcServerUseProtseq(ncacn_np) failed with status %d\n", status);
974 if (status == RPC_S_OK && !np_registered) endpoints_registered++;
975
976 status = RpcServerUseProtseqA(iptcp, 0, NULL);
977 ok(status == RPC_S_OK, "RpcServerUseProtseq(ncacn_ip_tcp) failed with status %d\n", status);
978 if (status == RPC_S_OK && !iptcp_registered) endpoints_registered++;
979
980 status = RpcServerUseProtseqA(ncalrpc, 0, NULL);
981 ok(status == RPC_S_OK, "RpcServerUseProtseqEp(ncalrpc) failed with status %d\n", status);
982 if (status == RPC_S_OK && !ncalrpc_registered) endpoints_registered++;
983
984 status = RpcServerInqBindings(&bindings);
985 ok(status == RPC_S_OK, "RpcServerInqBindings failed with status %d\n", status);
986 binding_count_after1 = bindings->Count;
987 ok(binding_count_after1 == binding_count_before + endpoints_registered,
988 "wrong binding count - before: %u, after %u, endpoints registered %u\n",
989 binding_count_before, binding_count_after1, endpoints_registered);
990 for (i = 0; i < bindings->Count; i++)
991 {
992 RPC_CSTR str_bind;
993 status = RpcBindingToStringBindingA(bindings->BindingH[i], &str_bind);
994 ok(status == RPC_S_OK, "RpcBindingToStringBinding failed with status %d\n", status);
995 trace("string binding: %s\n", str_bind);
996 RpcStringFreeA(&str_bind);
997 }
998 RpcBindingVectorFree(&bindings);
999
1000 /* re-register - endpoints should be reused */
1003 win_skip("ncacn_np not supported\n");
1004 else
1005 ok(status == RPC_S_OK, "RpcServerUseProtseq(ncacn_np) failed with status %d\n", status);
1006
1007 status = RpcServerUseProtseqA(iptcp, 0, NULL);
1008 ok(status == RPC_S_OK, "RpcServerUseProtseq(ncacn_ip_tcp) failed with status %d\n", status);
1009
1010 status = RpcServerUseProtseqA(ncalrpc, 0, NULL);
1011 ok(status == RPC_S_OK, "RpcServerUseProtseqEp(ncalrpc) failed with status %d\n", status);
1012
1013 status = RpcServerInqBindings(&bindings);
1014 ok(status == RPC_S_OK, "RpcServerInqBindings failed with status %d\n", status);
1015 binding_count_after2 = bindings->Count;
1016 ok(binding_count_after2 == binding_count_after1,
1017 "bindings should have been re-used - after1: %u after2: %u\n",
1018 binding_count_after1, binding_count_after2);
1019 RpcBindingVectorFree(&bindings);
1020}
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
RPC_STATUS WINAPI RpcBindingToStringBindingA(RPC_BINDING_HANDLE Binding, RPC_CSTR *StringBinding)
Definition: rpc_binding.c:920
RPC_STATUS WINAPI RpcServerUseProtseqA(RPC_CSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor)
Definition: rpc_server.c:1060
RPC_BINDING_HANDLE BindingH[1]
Definition: rpcdce.h:58

Referenced by START_TEST().

◆ test_RpcStringBindingFromBinding()

static void test_RpcStringBindingFromBinding ( void  )
static

Definition at line 694 of file rpc.c.

695{
696 static unsigned char ncacn_np[] = "ncacn_np";
697 static unsigned char address[] = ".";
698 static unsigned char endpoint[] = "\\pipe\\wine_rpc_test";
701 RPC_CSTR binding;
702
704 endpoint, NULL, &binding);
705 ok(status == RPC_S_OK, "RpcStringBindingCompose failed (%u)\n", status);
706
708 ok(status == RPC_S_OK, "RpcBindingFromStringBinding failed (%u)\n", status);
709 RpcStringFreeA(&binding);
710
712 ok(status == RPC_S_OK, "RpcStringBindingFromBinding failed with error %u\n", status);
713
714 ok(!strcmp((const char *)binding, "ncacn_np:.[\\\\pipe\\\\wine_rpc_test]"),
715 "binding string didn't match what was expected: \"%s\"\n", binding);
716 RpcStringFreeA(&binding);
717
719 ok(status == RPC_S_OK, "RpcBindingFree failed with error %u\n", status);
720}

Referenced by START_TEST().

◆ test_RpcStringBindingParseA()

static void test_RpcStringBindingParseA ( void  )
static

Definition at line 571 of file rpc.c.

572{
573 static unsigned char valid_binding[] = "00000000-0000-0000-c000-000000000046@ncacn_np:.[endpoint=\\pipe\\test]";
574 static unsigned char valid_binding2[] = "00000000-0000-0000-c000-000000000046@ncacn_np:.[\\pipe\\test]";
575 static unsigned char invalid_uuid_binding[] = "{00000000-0000-0000-c000-000000000046}@ncacn_np:.[endpoint=\\pipe\\test]";
576 static unsigned char invalid_ep_binding[] = "00000000-0000-0000-c000-000000000046@ncacn_np:.[endpoint=test]";
577 static unsigned char invalid_binding[] = "00000000-0000-0000-c000-000000000046@ncacn_np";
579 unsigned char *uuid;
580 unsigned char *protseq;
581 unsigned char *network_addr;
582 unsigned char *endpoint;
583 unsigned char *options;
584
585 /* test all parameters */
586 status = RpcStringBindingParseA(valid_binding, &uuid, &protseq, &network_addr, &endpoint, &options);
587 ok(status == RPC_S_OK, "RpcStringBindingParseA failed with error %d\n", status);
588 ok(!strcmp((char *)uuid, "00000000-0000-0000-c000-000000000046"), "uuid should have been 00000000-0000-0000-C000-000000000046 instead of %s\n", uuid);
589 ok(!strcmp((char *)protseq, "ncacn_np"), "protseq should have been ncacn_np instead of %s\n", protseq);
590 ok(!strcmp((char *)network_addr, "."), "network_addr should have been . instead of %s\n", network_addr);
591 ok(!strcmp((char *)endpoint, "pipetest"), "endpoint should have been pipetest instead of %s\n", endpoint);
592 if (options)
593 ok(!strcmp((char *)options, ""), "options should have been \"\" of \"%s\"\n", options);
594 else
595 todo_wine ok(FALSE, "options is NULL\n");
597 RpcStringFreeA(&protseq);
598 RpcStringFreeA(&network_addr);
601
602 /* test all parameters with different type of string binding */
603 status = RpcStringBindingParseA(valid_binding2, &uuid, &protseq, &network_addr, &endpoint, &options);
604 ok(status == RPC_S_OK, "RpcStringBindingParseA failed with error %d\n", status);
605 ok(!strcmp((char *)uuid, "00000000-0000-0000-c000-000000000046"), "uuid should have been 00000000-0000-0000-C000-000000000046 instead of %s\n", uuid);
606 ok(!strcmp((char *)protseq, "ncacn_np"), "protseq should have been ncacn_np instead of %s\n", protseq);
607 ok(!strcmp((char *)network_addr, "."), "network_addr should have been . instead of %s\n", network_addr);
608 ok(!strcmp((char *)endpoint, "pipetest"), "endpoint should have been pipetest instead of %s\n", endpoint);
609 if (options)
610 ok(!strcmp((char *)options, ""), "options should have been \"\" of \"%s\"\n", options);
611 else
612 todo_wine ok(FALSE, "options is NULL\n");
614 RpcStringFreeA(&protseq);
615 RpcStringFreeA(&network_addr);
618
619 /* test with as many parameters NULL as possible */
620 status = RpcStringBindingParseA(valid_binding, NULL, &protseq, NULL, NULL, NULL);
621 ok(status == RPC_S_OK, "RpcStringBindingParseA failed with error %d\n", status);
622 ok(!strcmp((char *)protseq, "ncacn_np"), "protseq should have been ncacn_np instead of %s\n", protseq);
623 RpcStringFreeA(&protseq);
624
625 /* test with invalid uuid */
626 status = RpcStringBindingParseA(invalid_uuid_binding, NULL, &protseq, NULL, NULL, NULL);
627 ok(status == RPC_S_INVALID_STRING_UUID, "RpcStringBindingParseA should have returned RPC_S_INVALID_STRING_UUID instead of %d\n", status);
628 ok(protseq == NULL, "protseq was %p instead of NULL\n", protseq);
629
630 /* test with invalid endpoint */
631 status = RpcStringBindingParseA(invalid_ep_binding, NULL, &protseq, NULL, NULL, NULL);
632 ok(status == RPC_S_OK, "RpcStringBindingParseA failed with error %d\n", status);
633 RpcStringFreeA(&protseq);
634
635 /* test with invalid binding */
636 status = RpcStringBindingParseA(invalid_binding, &uuid, &protseq, &network_addr, &endpoint, &options);
637 ok(status == RPC_S_INVALID_STRING_BINDING, "RpcStringBindingParseA should have returned RPC_S_INVALID_STRING_BINDING instead of %d\n", status);
638 ok(uuid == NULL, "uuid was %p instead of NULL\n", uuid);
639 if (uuid)
641 ok(protseq == NULL, "protseq was %p instead of NULL\n", protseq);
642 ok(network_addr == NULL, "network_addr was %p instead of NULL\n", network_addr);
643 if (network_addr)
644 RpcStringFreeA(&network_addr);
645 ok(endpoint == NULL, "endpoint was %p instead of NULL\n", endpoint);
646 ok(options == NULL, "options was %p instead of NULL\n", options);
647}
Definition: msctf.idl:550
RPC_STATUS WINAPI RpcStringBindingParseA(RPC_CSTR StringBinding, RPC_CSTR *ObjUuid, RPC_CSTR *Protseq, RPC_CSTR *NetworkAddr, RPC_CSTR *Endpoint, RPC_CSTR *Options)
Definition: rpc_binding.c:564

Referenced by START_TEST().

◆ test_RpcStringFree()

static void test_RpcStringFree ( void  )
static

Definition at line 854 of file rpc.c.

855{
856 RPC_WSTR string = NULL;
857
858 string = HeapAlloc(GetProcessHeap(), 0, 10*sizeof(WCHAR));
859 if (string == NULL)
860 {
861 skip("Failed to allocate a string!\n");
862 return;
863 }
864
865 RpcStringFreeW(&string);
866
867 ok(string == NULL, "String is %p expected NULL!\n", string);
868}
unsigned short * RPC_WSTR
Definition: rpcdce.h:46
RPC_STATUS WINAPI RpcStringFreeW(RPC_WSTR *String)
Definition: rpcrt4_main.c:175

Referenced by START_TEST().

◆ test_towers()

static void test_towers ( void  )
static

Definition at line 339 of file rpc.c.

340{
342 twr_t *tower;
343 static const RPC_SYNTAX_IDENTIFIER mapi_if_id = { { 0xa4f1db00, 0xca47, 0x1067, { 0xb3, 0x1f, 0x00, 0xdd, 0x01, 0x06, 0x62, 0xda } }, { 0, 0 } };
344 static const RPC_SYNTAX_IDENTIFIER ndr_syntax = { { 0x8a885d04, 0x1ceb, 0x11c9, { 0x9f, 0xe8, 0x08, 0x00, 0x2b, 0x10, 0x48, 0x60 } }, { 2, 0 } };
346 char *protseq, *endpoint, *address;
347 BOOL same;
348
349 ret = TowerConstruct(&mapi_if_id, &ndr_syntax, "ncacn_ip_tcp", "135", "10.0.0.1", &tower);
350 ok(ret == RPC_S_OK ||
351 broken(ret == RPC_S_INVALID_RPC_PROTSEQ), /* Vista */
352 "TowerConstruct failed with error %d\n", ret);
354 {
355 /* Windows Vista fails with this error and crashes if we continue */
356 win_skip("TowerConstruct failed, we are most likely on Windows Vista\n");
357 return;
358 }
359
360 /* first check we have the right amount of data */
361 ok(tower->tower_length == sizeof(tower_data_tcp_ip1) ||
362 tower->tower_length == sizeof(tower_data_tcp_ip2),
363 "Wrong size of tower %d\n", tower->tower_length);
364
365 /* then do a byte-by-byte comparison */
366 same = ((tower->tower_length == sizeof(tower_data_tcp_ip1)) &&
368 ((tower->tower_length == sizeof(tower_data_tcp_ip2)) &&
370
371 ok(same, "Tower data differs\n");
372 if (!same)
373 {
375 for (i = 0; i < tower->tower_length; i++)
376 {
377 if (i % 8 == 0) printf(" ");
378 printf("0x%02x,", tower->tower_octet_string[i]);
379 if (i % 8 == 7) printf("\n");
380 }
381 printf("\n");
382 }
383
384 ret = TowerExplode(tower, &object, &syntax, &protseq, &endpoint, &address);
385 ok(ret == RPC_S_OK, "TowerExplode failed with error %d\n", ret);
386 ok(!memcmp(&object, &mapi_if_id, sizeof(mapi_if_id)), "object id didn't match\n");
387 ok(!memcmp(&syntax, &ndr_syntax, sizeof(syntax)), "syntax id didn't match\n");
388 ok(!strcmp(protseq, "ncacn_ip_tcp"), "protseq was \"%s\" instead of \"ncacn_ip_tcp\"\n", protseq);
389 ok(!strcmp(endpoint, "135"), "endpoint was \"%s\" instead of \"135\"\n", endpoint);
390 ok(!strcmp(address, "10.0.0.1"), "address was \"%s\" instead of \"10.0.0.1\"\n", address);
391
392 I_RpcFree(protseq);
395
396 ret = TowerExplode(tower, NULL, NULL, NULL, NULL, NULL);
397 ok(ret == RPC_S_OK, "TowerExplode failed with error %d\n", ret);
398
399 I_RpcFree(tower);
400
401 /* test the behaviour for ip_tcp with name instead of dotted IP notation */
402 ret = TowerConstruct(&mapi_if_id, &ndr_syntax, "ncacn_ip_tcp", "135", "localhost", &tower);
403 ok(ret == RPC_S_OK, "TowerConstruct failed with error %d\n", ret);
404 ret = TowerExplode(tower, NULL, NULL, NULL, NULL, &address);
405 ok(ret == RPC_S_OK, "TowerExplode failed with error %d\n", ret);
406 ok(!strcmp(address, "0.0.0.0") ||
407 broken(!strcmp(address, "255.255.255.255")),
408 "address was \"%s\" instead of \"0.0.0.0\"\n", address);
409
411 I_RpcFree(tower);
412
413 /* test the behaviour for np with no address */
414 ret = TowerConstruct(&mapi_if_id, &ndr_syntax, "ncacn_np", "\\pipe\\test", NULL, &tower);
415 ok(ret == RPC_S_OK, "TowerConstruct failed with error %d\n", ret);
416 ret = TowerExplode(tower, NULL, NULL, NULL, NULL, &address);
417 ok(ret == RPC_S_OK ||
418 broken(ret != RPC_S_OK), /* win2k, indeterminate */
419 "TowerExplode failed with error %d\n", ret);
420 /* Windows XP SP3 sets address to NULL */
421 ok(!address || !strcmp(address, ""), "address was \"%s\" instead of \"\" or NULL (XP SP3)\n", address);
422
424 I_RpcFree(tower);
425}
#define printf
Definition: freeldr.h:97
RPC_STATUS WINAPI TowerExplode(const twr_t *tower, RPC_SYNTAX_IDENTIFIER *object, RPC_SYNTAX_IDENTIFIER *syntax, char **protseq, char **endpoint, char **address)
RPC_STATUS WINAPI TowerConstruct(const RPC_SYNTAX_IDENTIFIER *object, const RPC_SYNTAX_IDENTIFIER *syntax, const char *protseq, const char *endpoint, const char *address, twr_t **tower)
Definition: rpc_epmap.c:596
static const unsigned char tower_data_tcp_ip2[]
Definition: rpc.c:325
unsigned int unsigned32
Definition: rpc.c:43
static const unsigned char tower_data_tcp_ip1[]
Definition: rpc.c:311
void WINAPI I_RpcFree(void *Object)
Definition: rpcrt4_main.c:724
Definition: rpc.c:45
byte tower_octet_string[1]
Definition: rpc.c:47
unsigned32 tower_length
Definition: rpc.c:46

Referenced by START_TEST().

◆ test_UuidCreate()

static void test_UuidCreate ( void  )
static

Definition at line 722 of file rpc.c.

723{
724 UUID guid;
726
728 version = (guid.Data3 & 0xf000) >> 12;
729 ok(version == 4 || broken(version == 1), "unexpected version %d\n",
730 version);
731 if (version == 4)
732 {
733 static UUID v4and = { 0, 0, 0x4000, { 0x80,0,0,0,0,0,0,0 } };
734 static UUID v4or = { 0xffffffff, 0xffff, 0x4fff,
735 { 0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff } };
736 UUID and, or;
737 RPC_STATUS rslt;
738 int i;
739
740 and = guid;
741 or = guid;
742 /* Generate a bunch of UUIDs and mask them. By the end, we expect
743 * every randomly generated bit to have been zero at least once,
744 * resulting in no bits set in the and mask except those which are not
745 * randomly generated: the version number and the topmost bits of the
746 * Data4 field (treated as big-endian.) Similarly, we expect only
747 * the bits which are not randomly set to be cleared in the or mask.
748 */
749 for (i = 0; i < 1000; i++)
750 {
751 LPBYTE src, dst;
752
754 for (src = (LPBYTE)&guid, dst = (LPBYTE)&and;
755 src - (LPBYTE)&guid < sizeof(guid); src++, dst++)
756 *dst &= *src;
757 for (src = (LPBYTE)&guid, dst = (LPBYTE)&or;
758 src - (LPBYTE)&guid < sizeof(guid); src++, dst++)
759 *dst |= *src;
760 }
761 ok(UuidEqual(&and, &v4and, &rslt),
762 "unexpected bits set in V4 UUID: %s\n", wine_dbgstr_guid(&and));
763 ok(UuidEqual(&or, &v4or, &rslt),
764 "unexpected bits set in V4 UUID: %s\n", wine_dbgstr_guid(&or));
765 }
766 else
767 {
768 /* Older versions of Windows generate V1 UUIDs. For these, there are
769 * many stable bits, including at least the MAC address if one is
770 * present. Just check that Data4[0]'s most significant bits are
771 * set as expected.
772 */
773 ok((guid.Data4[0] & 0xc0) == 0x80,
774 "unexpected value in Data4[0]: %02x\n", guid.Data4[0] & 0xc0);
775 }
776}
static const WCHAR version[]
Definition: asmname.c:66
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
const GUID * guid
int WINAPI UuidEqual(UUID *Uuid1, UUID *Uuid2, RPC_STATUS *Status)
Definition: rpcrt4_main.c:252
RPC_STATUS WINAPI UuidCreate(UUID *Uuid)
Definition: rpcrt4_main.c:305
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:197
unsigned char * LPBYTE
Definition: typedefs.h:53
unsigned char BYTE
Definition: xxhash.c:193

Referenced by START_TEST().

◆ test_UuidCreateSequential()

static void test_UuidCreateSequential ( void  )
static

Definition at line 778 of file rpc.c.

779{
780 UUID guid1;
782 RPC_STATUS (WINAPI *pUuidCreateSequential)(UUID *) = (void *)GetProcAddress(GetModuleHandleA("rpcrt4.dll"), "UuidCreateSequential");
783 RPC_STATUS (WINAPI *pI_UuidCreate)(UUID *) = (void*)GetProcAddress(GetModuleHandleA("rpcrt4.dll"), "I_UuidCreate");
785
786 if (!pUuidCreateSequential)
787 {
788 win_skip("UuidCreateSequential not exported\n");
789 return;
790 }
791
792 ok(pI_UuidCreate != pUuidCreateSequential, "got %p, %p\n", pI_UuidCreate, pUuidCreateSequential);
793
794 ret = pUuidCreateSequential(&guid1);
796 "expected RPC_S_OK or RPC_S_UUID_LOCAL_ONLY, got %08x\n", ret);
797 version = (guid1.Data3 & 0xf000) >> 12;
798 ok(version == 1, "unexpected version %d\n", version);
799 if (version == 1)
800 {
801 UUID guid2;
802
803 if (!ret)
804 {
805 /* If the call succeeded, there's a valid (non-multicast) MAC
806 * address in the uuid:
807 */
808 ok(!(guid1.Data4[2] & 0x01) || broken(guid1.Data4[2] & 0x01), /* Win 8.1 */
809 "GUID does not appear to contain a MAC address: %s\n",
810 wine_dbgstr_guid(&guid1));
811 }
812 else
813 {
814 /* Otherwise, there's a randomly generated multicast MAC address
815 * address in the uuid:
816 */
817 ok((guid1.Data4[2] & 0x01),
818 "GUID does not appear to contain a multicast MAC address: %s\n",
819 wine_dbgstr_guid(&guid1));
820 }
821 /* Generate another GUID, and make sure its MAC address matches the
822 * first.
823 */
824 ret = pUuidCreateSequential(&guid2);
826 "expected RPC_S_OK or RPC_S_UUID_LOCAL_ONLY, got %08x\n", ret);
827 version = (guid2.Data3 & 0xf000) >> 12;
828 ok(version == 1, "unexpected version %d\n", version);
829 ok(!memcmp(guid1.Data4, guid2.Data4, sizeof(guid2.Data4)),
830 "unexpected value in MAC address: %s\n",
832
833 /* I_UuidCreate does exactly the same */
834 pI_UuidCreate(&guid2);
835 version = (guid2.Data3 & 0xf000) >> 12;
836 ok(version == 1, "unexpected version %d\n", version);
837 ok(!memcmp(guid1.Data4, guid2.Data4, sizeof(guid2.Data4)),
838 "unexpected value in MAC address: %s\n",
840 }
841}
static GUID guid2
Definition: devinst.c:42
#define RPC_S_UUID_LOCAL_ONLY
Definition: winerror.h:1131

Referenced by START_TEST().

◆ TestDceErrorInqText()

static void TestDceErrorInqText ( void  )
static

Definition at line 144 of file rpc.c.

145{
146 char bufferInvalid [1024];
147 char buffer [1024]; /* The required size is not documented but would
148 * appear to be 256.
149 */
150 DWORD dwCount;
151
153 RPC_S_NOT_RPC_ERROR, 0, bufferInvalid, ARRAY_SIZE(bufferInvalid), NULL);
154
155 /* A random sample of DceErrorInqText */
156 /* 0 is success */
157 ok ((DceErrorInqTextA (0, (unsigned char*)buffer) == RPC_S_OK),
158 "DceErrorInqTextA(0...)\n");
159 /* A real RPC_S error */
161 "DceErrorInqTextA(valid...)\n");
162
163 if (dwCount)
164 {
165 /* A message for which FormatMessage should fail
166 * which should return RPC_S_OK and the
167 * fixed "not valid" message
168 */
169 ok ((DceErrorInqTextA (35, (unsigned char*)buffer) == RPC_S_OK &&
170 strcmp (buffer, bufferInvalid) == 0),
171 "DceErrorInqTextA(unformattable...)\n");
172 /* One for which FormatMessage should succeed but
173 * DceErrorInqText should "fail"
174 * 3814 is generally quite a long message
175 */
176 ok ((DceErrorInqTextA (3814, (unsigned char*)buffer) == RPC_S_OK &&
177 strcmp (buffer, bufferInvalid) == 0),
178 "DceErrorInqTextA(deviation...)\n");
179 }
180 else
181 ok (0, "Cannot set up for DceErrorInqText\n");
182}
#define ARRAY_SIZE(A)
Definition: main.h:20
DWORD WINAPI FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:483
GLuint buffer
Definition: glext.h:5915
RPC_STATUS RPC_ENTRY DceErrorInqTextA(RPC_STATUS e, RPC_CSTR buffer)
Definition: rpcrt4_main.c:697
#define FORMAT_MESSAGE_IGNORE_INSERTS
Definition: winbase.h:446
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:449
#define RPC_S_NOT_RPC_ERROR
Definition: winerror.h:1130

Referenced by START_TEST().

◆ TowerConstruct()

RPC_STATUS WINAPI TowerConstruct ( const RPC_SYNTAX_IDENTIFIER object,
const RPC_SYNTAX_IDENTIFIER syntax,
const char protseq,
const char endpoint,
const char address,
twr_t **  tower 
)

Definition at line 596 of file rpc_epmap.c.

600{
601 size_t tower_size;
603 unsigned char *p;
604 twr_uuid_floor_t *object_floor;
605 twr_uuid_floor_t *syntax_floor;
606
607 TRACE("(%p, %p, %s, %s, %s, %p)\n", object, syntax, debugstr_a(protseq),
609
610 *tower = NULL;
611
612 status = RpcTransport_GetTopOfTower(NULL, &tower_size, protseq, address, endpoint);
613
614 if (status != RPC_S_OK)
615 return status;
616
617 tower_size += sizeof(u_int16) + sizeof(*object_floor) + sizeof(*syntax_floor);
618 *tower = I_RpcAllocate(FIELD_OFFSET(twr_t, tower_octet_string[tower_size]));
619 if (!*tower)
621
622 (*tower)->tower_length = tower_size;
623 p = &(*tower)->tower_octet_string[0];
624 *(u_int16 *)p = 5; /* number of floors */
625 p += sizeof(u_int16);
626 object_floor = (twr_uuid_floor_t *)p;
627 p += sizeof(*object_floor);
628 syntax_floor = (twr_uuid_floor_t *)p;
629 p += sizeof(*syntax_floor);
630
631 object_floor->count_lhs = sizeof(object_floor->protid) + sizeof(object_floor->uuid) +
632 sizeof(object_floor->major_version);
633 object_floor->protid = EPM_PROTOCOL_UUID;
634 object_floor->count_rhs = sizeof(object_floor->minor_version);
635 object_floor->uuid = object->SyntaxGUID;
636 object_floor->major_version = object->SyntaxVersion.MajorVersion;
637 object_floor->minor_version = object->SyntaxVersion.MinorVersion;
638
639 syntax_floor->count_lhs = sizeof(syntax_floor->protid) + sizeof(syntax_floor->uuid) +
640 sizeof(syntax_floor->major_version);
641 syntax_floor->protid = EPM_PROTOCOL_UUID;
642 syntax_floor->count_rhs = sizeof(syntax_floor->minor_version);
643 syntax_floor->uuid = syntax->SyntaxGUID;
644 syntax_floor->major_version = syntax->SyntaxVersion.MajorVersion;
645 syntax_floor->minor_version = syntax->SyntaxVersion.MinorVersion;
646
647 status = RpcTransport_GetTopOfTower(p, &tower_size, protseq, address, endpoint);
648 if (status != RPC_S_OK)
649 {
650 I_RpcFree(*tower);
651 *tower = NULL;
652 return status;
653 }
654 return RPC_S_OK;
655}
unsigned short u_int16
Definition: dcetypes.idl:33
#define EPM_PROTOCOL_UUID
Definition: epm_towers.h:35
GLfloat GLfloat p
Definition: glext.h:8902
#define debugstr_a
Definition: kernel32.h:31
RPC_STATUS RpcTransport_GetTopOfTower(unsigned char *tower_data, size_t *tower_size, const char *protseq, const char *networkaddr, const char *endpoint) DECLSPEC_HIDDEN
void *WINAPI I_RpcAllocate(unsigned int Size)
Definition: rpcrt4_main.c:716
#define TRACE(s)
Definition: solgame.cpp:4
RPC_VERSION SyntaxVersion
Definition: rpcdcep.h:33
unsigned short MajorVersion
Definition: rpcdcep.h:27
unsigned short MinorVersion
Definition: rpcdcep.h:28
u_int16 minor_version
Definition: epm_towers.h:62
u_int16 count_lhs
Definition: epm_towers.h:57
u_int16 count_rhs
Definition: epm_towers.h:61
u_int16 major_version
Definition: epm_towers.h:60
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255

Referenced by test_towers().

◆ TowerExplode()

RPC_STATUS WINAPI TowerExplode ( const twr_t tower,
RPC_SYNTAX_IDENTIFIER object,
RPC_SYNTAX_IDENTIFIER syntax,
char **  protseq,
char **  endpoint,
char **  address 
)

Referenced by test_towers().

◆ UuidConversionAndComparison()

static void UuidConversionAndComparison ( void  )
static

Definition at line 81 of file rpc.c.

81 {
82 CHAR strx[100], x;
83 LPSTR str = strx;
84 WCHAR wstrx[100], wx;
85 LPWSTR wstr = wstrx;
86
87 UUID Uuid1, Uuid2, *PUuid1, *PUuid2;
88 RPC_STATUS rslt;
89
90 int i1,i2;
91
92 /* Uuid Equality */
93 for (i1 = 0; i1 < 11; i1++)
94 for (i2 = 0; i2 < 11; i2++) {
95 if (i1 < 10) {
96 Uuid1 = Uuid_Table[i1];
97 PUuid1 = &Uuid1;
98 } else {
99 PUuid1 = NULL;
100 }
101 if (i2 < 10) {
102 Uuid2 = Uuid_Table[i2];
103 PUuid2 = &Uuid2;
104 } else {
105 PUuid2 = NULL;
106 }
107 ok( (UuidEqual(PUuid1, PUuid2, &rslt) == Uuid_Comparison_Grid[i1][i2]), "UUID Equality\n" );
108 }
109
110 /* Uuid to String to Uuid (char) */
111 for (i1 = 0; i1 < 10; i1++) {
112 Uuid1 = Uuid_Table[i1];
113 ok( (UuidToStringA(&Uuid1, (unsigned char**)&str) == RPC_S_OK), "Simple UUID->String copy\n" );
114 ok( (UuidFromStringA((unsigned char*)str, &Uuid2) == RPC_S_OK), "Simple String->UUID copy from generated UUID String\n" );
115 ok( UuidEqual(&Uuid1, &Uuid2, &rslt), "Uuid -> String -> Uuid transform\n" );
116 /* invalid uuid tests -- size of valid UUID string=36 */
117 for (i2 = 0; i2 < 36; i2++) {
118 x = str[i2];
119 str[i2] = 'g'; /* whatever, but "g" is a good boundary condition */
120 ok( (UuidFromStringA((unsigned char*)str, &Uuid1) == RPC_S_INVALID_STRING_UUID), "Invalid UUID String\n" );
121 str[i2] = x; /* change it back so remaining tests are interesting. */
122 }
123 RpcStringFreeA((unsigned char **)&str);
124 }
125
126 /* Uuid to String to Uuid (wchar) */
127 for (i1 = 0; i1 < 10; i1++) {
128 Uuid1 = Uuid_Table[i1];
129 rslt=UuidToStringW(&Uuid1, &wstr);
130 ok( (rslt == RPC_S_OK), "Simple UUID->WString copy\n" );
131 ok( (UuidFromStringW(wstr, &Uuid2) == RPC_S_OK), "Simple WString->UUID copy from generated UUID String\n" );
132 ok( UuidEqual(&Uuid1, &Uuid2, &rslt), "Uuid -> WString -> Uuid transform\n" );
133 /* invalid uuid tests -- size of valid UUID string=36 */
134 for (i2 = 0; i2 < 36; i2++) {
135 wx = wstr[i2];
136 wstr[i2] = 'g'; /* whatever, but "g" is a good boundary condition */
137 ok( (UuidFromStringW(wstr, &Uuid1) == RPC_S_INVALID_STRING_UUID), "Invalid UUID WString\n" );
138 wstr[i2] = wx; /* change it back so remaining tests are interesting. */
139 }
140 RpcStringFreeW(&wstr);
141 }
142}
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
static UUID Uuid_Table[10]
Definition: rpc.c:53
static BOOL Uuid_Comparison_Grid[11][11]
Definition: rpc.c:67
const WCHAR * str
RPC_STATUS WINAPI UuidToStringA(UUID *Uuid, RPC_CSTR *StringUuid)
Definition: rpcrt4_main.c:514
RPC_STATUS WINAPI UuidToStringW(UUID *Uuid, RPC_WSTR *StringUuid)
Definition: rpcrt4_main.c:540
RPC_STATUS WINAPI UuidFromStringW(RPC_WSTR s, UUID *uuid)
Definition: rpcrt4_main.c:614
RPC_STATUS WINAPI UuidFromStringA(RPC_CSTR s, UUID *uuid)
Definition: rpcrt4_main.c:574
char * LPSTR
Definition: xmlstorage.h:182
WCHAR * LPWSTR
Definition: xmlstorage.h:184
char CHAR
Definition: xmlstorage.h:175

Referenced by START_TEST().

Variable Documentation

◆ IFoo___RpcServerInterface

const RPC_SERVER_INTERFACE IFoo___RpcServerInterface
static
Initial value:
=
{
{{0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x34}},{0,0}},
{{0x8a885d04,0x1ceb,0x11c9,{0x9f,0xe8,0x08,0x00,0x2b,0x10,0x48,0x60}},{2,0}},
0,
0,
0,
0,
0,
}
static RPC_DISPATCH_TABLE IFoo_v0_0_DispatchTable
Definition: rpc.c:189
struct _RPC_SERVER_INTERFACE RPC_SERVER_INTERFACE

Definition at line 195 of file rpc.c.

◆ IFoo_table

RPC_DISPATCH_FUNCTION IFoo_table[]
static
Initial value:
=
{
0
}

Definition at line 184 of file rpc.c.

◆ IFoo_v0_0_DispatchTable

RPC_DISPATCH_TABLE IFoo_v0_0_DispatchTable
static
Initial value:
=
{
0,
}
static RPC_DISPATCH_FUNCTION IFoo_table[]
Definition: rpc.c:184

Definition at line 189 of file rpc.c.

◆ IFoo_v0_0_s_ifspec

RPC_IF_HANDLE IFoo_v0_0_s_ifspec = (RPC_IF_HANDLE)& IFoo___RpcServerInterface
static

Definition at line 208 of file rpc.c.

Referenced by test_endpoint_mapper(), and test_rpc_ncacn_ip_tcp().

◆ tower_data_tcp_ip1

const unsigned char tower_data_tcp_ip1[]
static
Initial value:
=
{
0x05,0x00,0x13,0x00,0x0d,0x00,0xdb,0xf1,
0xa4,0x47,0xca,0x67,0x10,0xb3,0x1f,0x00,
0xdd,0x01,0x06,0x62,0xda,0x00,0x00,0x02,
0x00,0x00,0x00,0x13,0x00,0x0d,0x04,0x5d,
0x88,0x8a,0xeb,0x1c,0xc9,0x11,0x9f,0xe8,
0x08,0x00,0x2b,0x10,0x48,0x60,0x02,0x00,
0x02,0x00,0x00,0x00,0x01,0x00,0x0b,0x02,
0x00,0x00,0x00,0x01,0x00,0x07,0x02,0x00,
0x00,0x87,0x01,0x00,0x09,0x04,0x00,0x0a,
0x00,0x00,0x01,
}

Definition at line 311 of file rpc.c.

Referenced by test_towers().

◆ tower_data_tcp_ip2

const unsigned char tower_data_tcp_ip2[]
static
Initial value:
=
{
0x05,0x00,0x13,0x00,0x0d,0x00,0xdb,0xf1,
0xa4,0x47,0xca,0x67,0x10,0xb3,0x1f,0x00,
0xdd,0x01,0x06,0x62,0xda,0x00,0x00,0x02,
0x00,0x00,0x00,0x13,0x00,0x0d,0x04,0x5d,
0x88,0x8a,0xeb,0x1c,0xc9,0x11,0x9f,0xe8,
0x08,0x00,0x2b,0x10,0x48,0x60,0x02,0x00,
0x02,0x00,0x00,0x00,0x01,0x00,0x0b,0x00,
0x00,0x01,0x00,0x07,0x02,0x00,0x00,0x87,
0x01,0x00,0x09,0x04,0x00,0x0a,0x00,0x00,
0x01,
}

Definition at line 325 of file rpc.c.

Referenced by test_towers().

◆ Uuid_Comparison_Grid

◆ Uuid_Table

UUID Uuid_Table[10]
static
Initial value:
= {
{ 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} },
{ 0xdeadbeef, 0xdead, 0xbeef, {0x10, 0x21, 0x35, 0x56, 0x89, 0xa0, 0xf4, 0x8a} },
{ 0xabadfeed, 0x49ff, 0xbead, {0x8a, 0xf4, 0xa0, 0x89, 0x56, 0x35, 0x21, 0x10} },
{ 0x93da375c, 0x1324, 0x1355, {0x87, 0xff, 0x49, 0x44, 0x34, 0x44, 0x22, 0x19} },
{ 0xdeadbeef, 0xdead, 0xbeef, {0x10, 0x21, 0x35, 0x56, 0x89, 0xa0, 0xf4, 0x8b} },
{ 0x9badfeed, 0x49ff, 0xbead, {0x8a, 0xf4, 0xa0, 0x89, 0x56, 0x35, 0x21, 0x10} },
{ 0x00000000, 0x0001, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} },
{ 0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01} },
{ 0x12312312, 0x1231, 0x1231, {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xff} },
{ 0x11111111, 0x1111, 0x1111, {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11} }
}

Definition at line 53 of file rpc.c.

Referenced by UuidConversionAndComparison().