ReactOS  0.4.15-dev-5608-gafb953a
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,
1127  APP_REMOVE
1128 };
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 
1116 done:
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 }
HRESULT hr
Definition: shlfolder.c:183
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
short VARIANT_BOOL
Definition: compat.h:2290
static int init
Definition: wintirpc.c:33
WDF_INTERRUPT_POLICY policy
if SUCCEEDED(hr)
WDF_DMA_PROFILE profile
LONG HRESULT
Definition: typedefs.h:79
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
#define S_OK
Definition: intsafe.h:52
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
#define ok(value,...)
Definition: atltest.h:57
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
#define NULL
Definition: types.h:112

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 }
enum _TOKEN_ELEVATION_TYPE TOKEN_ELEVATION_TYPE
#define CloseHandle
Definition: compat.h:739
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
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
GLsizeiptr size
Definition: glext.h:5919
#define TOKEN_QUERY
Definition: setypes.h:924
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
#define GetCurrentProcess()
Definition: compat.h:759
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:296
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
Definition: security.c:413
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545

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  {
1143  SysFreeString( image );
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 
1172  name = SysAllocString( testW );
1173  hr = INetFwAuthorizedApplication_put_Name( app, name );
1174  SysFreeString( 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 
1185 done:
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();
1192  SysFreeString( image );
1193  return hr;
1194 }
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
HRESULT hr
Definition: shlfolder.c:183
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339
OLECHAR * BSTR
Definition: compat.h:2293
#define E_FAIL
Definition: ddrawi.h:102
static int init
Definition: wintirpc.c:33
WDF_INTERRUPT_POLICY policy
if SUCCEEDED(hr)
#define E_INVALIDARG
Definition: ddrawi.h:101
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
WDF_DMA_PROFILE profile
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
#define MAX_PATH
Definition: compat.h:34
UINT op
Definition: effect.c:236
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
#define S_OK
Definition: intsafe.h:52
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
#define ok(value,...)
Definition: atltest.h:57
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define NULL
Definition: types.h:112
Definition: name.c:38
Definition: rpc.c:1126
static const WCHAR testW[]
Definition: jsregexp.c:44
GLuint const GLchar * name
Definition: glext.h:6031

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");
1217  test_UuidCreate();
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 }
static void UuidConversionAndComparison(void)
Definition: rpc.c:81
HRESULT hr
Definition: shlfolder.c:183
static void test_RpcServerUseProtseq(void)
Definition: rpc.c:924
static HRESULT set_firewall(enum firewall_op op)
Definition: rpc.c:1130
static void test_UuidCreate(void)
Definition: rpc.c:722
static void test_RpcExceptionFilter(const char *func_name)
Definition: rpc.c:649
unsigned int BOOL
Definition: ntddk_ex.h:94
static void TestDceErrorInqText(void)
Definition: rpc.c:144
static void test_endpoint_mapper(RPC_CSTR protseq, RPC_CSTR address)
Definition: rpc.c:1022
static void test_UuidCreateSequential(void)
Definition: rpc.c:778
LONG HRESULT
Definition: typedefs.h:79
static void test_rpc_ncacn_ip_tcp(void)
Definition: rpc.c:210
static BOOL is_process_elevated(void)
Definition: rpc.c:1075
static void test_RpcServerRegisterAuthInfo(void)
Definition: rpc.c:916
static void test_towers(void)
Definition: rpc.c:339
static void test_RpcServerInqDefaultPrincName(void)
Definition: rpc.c:870
static void test_RpcStringBindingFromBinding(void)
Definition: rpc.c:694
#define S_OK
Definition: intsafe.h:52
static void test_RpcBindingFree(void)
Definition: rpc.c:843
static void test_RpcStringFree(void)
Definition: rpc.c:854
static BOOL is_firewall_enabled(void)
Definition: rpc.c:1091
static void test_RpcStringBindingParseA(void)
Definition: rpc.c:571
#define NULL
Definition: types.h:112
#define skip(...)
Definition: atltest.h:64
Definition: rpc.c:1126
static void test_I_RpcMapWin32Status(void)
Definition: rpc.c:427

◆ 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;
1027  handle_t handle;
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 
1056  ok(status == RPC_S_OK || broken(status == RPC_S_SERVER_UNAVAILABLE), /* win9x */
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 }
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
#define RPC_S_SERVER_UNAVAILABLE
Definition: winerror.h:1033
RPC_STATUS WINAPI RpcStringFreeA(RPC_CSTR *String)
Definition: rpcrt4_main.c:158
RPC_STATUS WINAPI RpcServerUnregisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, UINT WaitForCallsToComplete)
Definition: rpc_server.c:1202
RPC_STATUS RPC_ENTRY RpcBindingReset(RPC_BINDING_HANDLE Binding)
Definition: rpc_binding.c:1024
long RPC_STATUS
Definition: rpc.h:52
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
Definition: sock.c:82
#define FALSE
Definition: types.h:117
static RPC_IF_HANDLE IFoo_v0_0_s_ifspec
Definition: rpc.c:208
RPC_STATUS WINAPI RpcServerInqBindings(RPC_BINDING_VECTOR **BindingVector)
Definition: rpc_server.c:861
RPC_STATUS WINAPI RpcBindingFromStringBindingA(RPC_CSTR StringBinding, RPC_BINDING_HANDLE *Binding)
Definition: rpc_binding.c:840
RPC_STATUS WINAPI RpcBindingVectorFree(RPC_BINDING_VECTOR **BindingVector)
Definition: rpc_binding.c:802
GLuint address
Definition: glext.h:9393
RPC_STATUS WINAPI RpcServerRegisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, RPC_MGR_EPV *MgrEpv)
Definition: rpc_server.c:1116
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 RpcEpUnregister(RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR *BindingVector, UUID_VECTOR *UuidVector)
Definition: rpc_epmap.c:344
#define broken(x)
Definition: _sntprintf.h:21
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
RPC_STATUS WINAPI RpcEpResolveBinding(RPC_BINDING_HANDLE Binding, RPC_IF_HANDLE IfSpec)
Definition: rpc_epmap.c:431
#define annotation(x)
Definition: dispex.idl:19
static SERVICE_STATUS status
Definition: service.c:31
#define RPC_S_OK
Definition: rpcnterr.h:22
Definition: ps.c:97

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 RPC_NT_NO_PROTSEQS_REGISTERED
Definition: ntstatus.h:1193
#define RPC_S_UNKNOWN_IF
Definition: winerror.h:1028
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define RPC_X_SS_IN_NULL_CONTEXT
Definition: winerror.h:1083
#define STATUS_WRONG_PASSWORD
Definition: ntstatus.h:342
#define RPC_X_SS_CHAR_TRANS_OPEN_FAIL
Definition: winerror.h:1081
#define RPC_S_ENTRY_ALREADY_EXISTS
Definition: winerror.h:1068
#define RPC_NT_DUPLICATE_ENDPOINT
Definition: ntstatus.h:1216
#define RPC_NT_SS_CONTEXT_MISMATCH
Definition: ntstatus.h:1269
#define RPC_S_UNSUPPORTED_TRANS_SYN
Definition: winerror.h:1040
#define STATUS_INVALID_SECURITY_DESCR
Definition: ntstatus.h:357
#define RPC_S_PROCNUM_OUT_OF_RANGE
Definition: winerror.h:1053
#define RPC_NT_INVALID_TIMEOUT
Definition: ntstatus.h:1188
#define RPC_NT_BAD_STUB_DATA
Definition: ntstatus.h:1276
#define ERROR_ACCOUNT_DISABLED
Definition: winerror.h:813
#define RPC_S_INVALID_BOUND
Definition: winerror.h:1043
#define RPC_NT_BYTE_COUNT_TOO_SMALL
Definition: ntstatus.h:1275
#define RPC_S_NO_ENDPOINT_FOUND
Definition: winerror.h:1019
#define ERROR_SUCCESS
Definition: deptool.c:10
#define RPC_X_NULL_REF_POINTER
Definition: winerror.h:1087
#define RPC_NT_NO_CONTEXT_AVAILABLE
Definition: ntstatus.h:1241
#define RPC_X_PIPE_EMPTY
Definition: winerror.h:1160
#define RPC_NT_INTERFACE_NOT_FOUND
Definition: ntstatus.h:1235
#define RPC_NT_UNKNOWN_AUTHZ_SERVICE
Definition: ntstatus.h:1226
#define RPC_X_SS_CONTEXT_DAMAGED
Definition: winerror.h:1084
#define RPC_NT_SS_CHAR_TRANS_OPEN_FAIL
Definition: ntstatus.h:1266
#define RPC_NT_CANNOT_SUPPORT
Definition: ntstatus.h:1240
#define RPC_X_SS_CHAR_TRANS_SHORT_FILE
Definition: winerror.h:1082
#define RPC_S_NO_CONTEXT_AVAILABLE
Definition: winerror.h:1073
#define TRUE
Definition: types.h:120
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
#define RPC_S_NOTHING_TO_EXPORT
Definition: winerror.h:1062
#define RPC_S_NAME_SERVICE_UNAVAILABLE
Definition: winerror.h:1070
#define RPC_NT_NO_PROTSEQS
Definition: ntstatus.h:1198
#define RPC_S_INVALID_NET_ADDR
Definition: winerror.h:1018
#define RPC_NT_ALREADY_LISTENING
Definition: ntstatus.h:1192
#define EPT_NT_CANT_CREATE
Definition: ntstatus.h:1251
#define RPC_S_NO_BINDINGS
Definition: winerror.h:1029
#define RPC_S_NO_PROTSEQS_REGISTERED
Definition: winerror.h:1025
#define RPC_NT_INVALID_TAG
Definition: ntstatus.h:1210
#define RPC_S_WRONG_KIND_OF_BINDING
Definition: winerror.h:1012
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
#define RPC_NT_NO_MORE_MEMBERS
Definition: ntstatus.h:1233
#define RPC_NT_UNKNOWN_AUTHN_LEVEL
Definition: ntstatus.h:1224
#define RPC_S_INVALID_ASYNC_CALL
Definition: winerror.h:1157
#define RPC_X_BYTE_COUNT_TOO_SMALL
Definition: winerror.h:1089
#define RPC_NT_INVALID_RPC_PROTSEQ
Definition: ntstatus.h:1183
#define RPC_NT_SERVER_TOO_BUSY
Definition: ntstatus.h:1202
#define STATUS_INSUFF_SERVER_RESOURCES
Definition: ntstatus.h:649
#define RPC_NT_NO_CALL_ACTIVE
Definition: ntstatus.h:1204
#define RPC_S_SERVER_UNAVAILABLE
Definition: winerror.h:1033
#define RPC_NT_UNKNOWN_AUTHN_TYPE
Definition: ntstatus.h:1217
#define RPC_NT_ENUM_VALUE_OUT_OF_RANGE
Definition: ntstatus.h:1274
#define RPC_X_PIPE_CLOSED
Definition: winerror.h:1158
#define RPC_S_NO_MORE_BINDINGS
Definition: winerror.h:1113
#define RPC_NT_GROUP_MEMBER_NOT_FOUND
Definition: ntstatus.h:1250
#define STATUS_ACCOUNT_LOCKED_OUT
Definition: ntstatus.h:696
#define RPC_NT_INVALID_BOUND
Definition: ntstatus.h:1211
#define RPC_NT_INVALID_NAME_SYNTAX
Definition: ntstatus.h:1213
#define RPC_NT_INVALID_VERS_OPTION
Definition: ntstatus.h:1232
#define RPC_S_INVALID_ENDPOINT_FORMAT
Definition: winerror.h:1017
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
#define STATUS_INVALID_LOGON_HOURS
Definition: ntstatus.h:347
#define EPT_NT_CANT_PERFORM_OP
Definition: ntstatus.h:1228
#define ERROR_WRONG_PASSWORD
Definition: winerror.h:805
#define ERROR_MAX_THRDS_REACHED
Definition: winerror.h:235
#define RPC_S_UNKNOWN_AUTHN_LEVEL
Definition: winerror.h:1056
long RPC_STATUS
Definition: rpc.h:52
#define ERROR_NOACCESS
Definition: winerror.h:578
#define RPC_S_INVALID_OBJECT
Definition: winerror.h:1142
#define RPC_S_ZERO_DIVIDE
Definition: winerror.h:1075
#define FALSE
Definition: types.h:117
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
#define RPC_NT_INVALID_NAF_ID
Definition: ntstatus.h:1239
#define RPC_NT_ZERO_DIVIDE
Definition: ntstatus.h:1243
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
#define RPC_NT_INVALID_STRING_UUID
Definition: ntstatus.h:1184
#define ERROR_NOT_ENOUGH_SERVER_MEMORY
Definition: winerror.h:666
#define RPC_NT_INVALID_ASYNC_CALL
Definition: ntstatus.h:1263
#define RPC_NT_INTERNAL_ERROR
Definition: ntstatus.h:1242
#define RPC_S_INVALID_TAG
Definition: winerror.h:1042
#define RPC_S_FP_UNDERFLOW
Definition: winerror.h:1078
#define RPC_NT_CANT_CREATE_ENDPOINT
Definition: ntstatus.h:1199
#define RPC_S_CALL_FAILED_DNE
Definition: winerror.h:1038
#define ERROR_PASSWORD_MUST_CHANGE
Definition: winerror.h:1149
#define RPC_S_INVALID_BINDING
Definition: winerror.h:1013
#define RPC_NT_INCOMPLETE_NAME
Definition: ntstatus.h:1231
#define RPC_NT_CALL_CANCELLED
Definition: ntstatus.h:1254
#define RPC_S_NO_ENTRY_NAME
Definition: winerror.h:1044
#define RPC_S_INVALID_TIMEOUT
Definition: winerror.h:1020
#define RPC_S_CANNOT_SUPPORT
Definition: winerror.h:1072
#define RPC_NT_PROCNUM_OUT_OF_RANGE
Definition: ntstatus.h:1221
#define RPC_NT_UNSUPPORTED_TRANS_SYN
Definition: ntstatus.h:1208
#define RPC_S_INVALID_VERS_OPTION
Definition: winerror.h:1064
#define RPC_NT_UNKNOWN_IF
Definition: ntstatus.h:1196
#define RPC_NT_INVALID_OBJECT
Definition: ntstatus.h:1252
#define RPC_S_FP_OVERFLOW
Definition: winerror.h:1079
#define RPC_S_NOT_LISTENING
Definition: winerror.h:1026
#define RPC_NT_ENTRY_ALREADY_EXISTS
Definition: ntstatus.h:1236
#define RPC_S_PROTOCOL_ERROR
Definition: winerror.h:1039
#define RPC_S_INTERFACE_NOT_FOUND
Definition: winerror.h:1067
#define RPC_S_INCOMPLETE_NAME
Definition: winerror.h:1063
#define STATUS_ACCOUNT_DISABLED
Definition: ntstatus.h:350
#define RPC_S_PROTSEQ_NOT_SUPPORTED
Definition: winerror.h:1014
#define RPC_S_CALL_IN_PROGRESS
Definition: winerror.h:1098
#define RPC_S_DUPLICATE_ENDPOINT
Definition: winerror.h:1048
#define RPC_NT_ALREADY_REGISTERED
Definition: ntstatus.h:1190
#define RPC_S_UNSUPPORTED_TYPE
Definition: winerror.h:1041
#define RPC_S_INVALID_NETWORK_OPTIONS
Definition: winerror.h:1035
#define RPC_NT_SS_CANNOT_GET_CALL_HANDLE
Definition: ntstatus.h:1272
#define RPC_S_NO_PROTSEQS
Definition: winerror.h:1030
#define RPC_S_GROUP_MEMBER_NOT_FOUND
Definition: winerror.h:1140
#define RPC_NT_UNKNOWN_MGR_TYPE
Definition: ntstatus.h:1195
#define EPT_S_INVALID_ENTRY
Definition: winerror.h:1059
#define STATUS_PASSWORD_EXPIRED
Definition: ntstatus.h:349
#define RPC_NT_INVALID_NET_ADDR
Definition: ntstatus.h:1186
#define RPC_NT_SS_IN_NULL_CONTEXT
Definition: ntstatus.h:1268
#define RPC_S_UNKNOWN_MGR_TYPE
Definition: winerror.h:1027
#define RPC_NT_PIPE_EMPTY
Definition: ntstatus.h:1285
#define RPC_S_OBJECT_NOT_FOUND
Definition: winerror.h:1021
#define RPC_NT_STRING_TOO_LONG
Definition: ntstatus.h:1219
#define RPC_S_NO_MORE_MEMBERS
Definition: winerror.h:1065
#define RPC_NT_NO_ENDPOINT_FOUND
Definition: ntstatus.h:1187
#define STATUS_ACCESS_DENIED
Definition: udferr_usr.h:145
#define RPC_NT_FP_UNDERFLOW
Definition: ntstatus.h:1246
#define RPC_S_TYPE_ALREADY_REGISTERED
Definition: winerror.h:1023
#define RPC_NT_FP_OVERFLOW
Definition: ntstatus.h:1247
#define RPC_S_INVALID_STRING_UUID
Definition: winerror.h:1016
#define RPC_S_CALL_CANCELLED
Definition: winerror.h:1125
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define RPC_NT_FP_DIV_ZERO
Definition: ntstatus.h:1245
#define RPC_NT_INVALID_STRING_BINDING
Definition: ntstatus.h:1179
#define RPC_NT_ENTRY_NOT_FOUND
Definition: ntstatus.h:1237
#define RPC_X_ENUM_VALUE_OUT_OF_RANGE
Definition: winerror.h:1088
#define RPC_NT_NOT_ALL_OBJS_UNEXPORTED
Definition: ntstatus.h:1234
#define RPC_S_MAX_CALLS_TOO_SMALL
Definition: winerror.h:1050
#define RPC_NT_INVALID_BINDING
Definition: ntstatus.h:1181
#define RPC_NT_MAX_CALLS_TOO_SMALL
Definition: ntstatus.h:1218
#define RPC_S_UNSUPPORTED_NAME_SYNTAX
Definition: winerror.h:1046
#define RPC_S_UUID_NO_ADDRESS
Definition: winerror.h:1047
#define RPC_NT_INVALID_NETWORK_OPTIONS
Definition: ntstatus.h:1203
#define RPC_S_UNKNOWN_AUTHN_SERVICE
Definition: winerror.h:1055
#define ERROR_INVALID_SECURITY_DESCR
Definition: winerror.h:820
#define RPC_NT_OBJECT_NOT_FOUND
Definition: ntstatus.h:1189
#define RPC_S_ADDRESS_ERROR
Definition: winerror.h:1076
#define RPC_NT_NO_MORE_ENTRIES
Definition: ntstatus.h:1265
#define RPC_S_NO_CALL_ACTIVE
Definition: winerror.h:1036
#define RPC_NT_UNSUPPORTED_NAME_SYNTAX
Definition: ntstatus.h:1214
#define RPC_S_INTERNAL_ERROR
Definition: winerror.h:1074
#define RPC_NT_TYPE_ALREADY_REGISTERED
Definition: ntstatus.h:1191
#define ERROR_INVALID_LOGON_HOURS
Definition: winerror.h:810
#define broken(x)
Definition: _sntprintf.h:21
#define RPC_X_SS_CANNOT_GET_CALL_HANDLE
Definition: winerror.h:1086
#define RPC_S_ALREADY_LISTENING
Definition: winerror.h:1024
#define RPC_S_INVALID_RPC_PROTSEQ
Definition: winerror.h:1015
#define RPC_S_SERVER_TOO_BUSY
Definition: winerror.h:1034
#define RPC_S_INVALID_NAME_SYNTAX
Definition: winerror.h:1045
#define RPC_NT_SS_CONTEXT_DAMAGED
Definition: ntstatus.h:1270
#define RPC_NT_PROTOCOL_ERROR
Definition: ntstatus.h:1207
#define RPC_S_BINDING_HAS_NO_AUTH
Definition: winerror.h:1054
#define RPC_NT_SS_HANDLES_MISMATCH
Definition: ntstatus.h:1271
#define RPC_NT_CALL_IN_PROGRESS
Definition: ntstatus.h:1248
#define ERROR_PASSWORD_EXPIRED
Definition: winerror.h:812
#define RPC_NT_UNKNOWN_AUTHN_SERVICE
Definition: ntstatus.h:1223
#define RPC_NT_CALL_FAILED_DNE
Definition: ntstatus.h:1206
#define STATUS_ACCESS_VIOLATION
Definition: ntstatus.h:242
#define STATUS_PASSWORD_MUST_CHANGE
Definition: ntstatus.h:680
#define RPC_NT_INVALID_AUTH_IDENTITY
Definition: ntstatus.h:1225
#define ok(value,...)
Definition: atltest.h:57
#define RPC_X_SS_HANDLES_MISMATCH
Definition: winerror.h:1085
#define STATUS_NO_MEMORY
Definition: ntstatus.h:260
#define RPC_NT_PIPE_DISCIPLINE_ERROR
Definition: ntstatus.h:1284
#define RPC_NT_NO_ENTRY_NAME
Definition: ntstatus.h:1212
#define RPC_NT_INVALID_ENDPOINT_FORMAT
Definition: ntstatus.h:1185
#define RPC_NT_PIPE_CLOSED
Definition: ntstatus.h:1283
#define RPC_S_OUT_OF_RESOURCES
Definition: winerror.h:1032
#define EPT_S_NOT_REGISTERED
Definition: winerror.h:1061
#define RPC_S_INVALID_NAF_ID
Definition: winerror.h:1071
#define RPC_NT_INVALID_ASYNC_HANDLE
Definition: ntstatus.h:1262
#define RPC_S_ENTRY_NOT_FOUND
Definition: winerror.h:1069
#define RPC_X_NO_MORE_ENTRIES
Definition: winerror.h:1080
#define EPT_S_CANT_CREATE
Definition: winerror.h:1141
#define RPC_NT_NAME_SERVICE_UNAVAILABLE
Definition: ntstatus.h:1238
#define RPC_S_UNKNOWN_AUTHZ_SERVICE
Definition: winerror.h:1058
#define EPT_NT_NOT_REGISTERED
Definition: ntstatus.h:1229
#define RPC_X_BAD_STUB_DATA
Definition: winerror.h:1090
#define RPC_NT_NOTHING_TO_EXPORT
Definition: ntstatus.h:1230
#define RPC_NT_BINDING_HAS_NO_AUTH
Definition: ntstatus.h:1222
#define EPT_S_CANT_PERFORM_OP
Definition: winerror.h:1060
#define RPC_S_INVALID_AUTH_IDENTITY
Definition: winerror.h:1057
#define RPC_NT_UNSUPPORTED_TYPE
Definition: ntstatus.h:1209
#define RPC_S_CALL_FAILED
Definition: winerror.h:1037
#define RPC_NT_NULL_REF_POINTER
Definition: ntstatus.h:1273
#define RPC_NT_OUT_OF_RESOURCES
Definition: ntstatus.h:1200
#define ERROR_ACCOUNT_LOCKED_OUT
Definition: winerror.h:1151
#define RPC_NT_CALL_FAILED
Definition: ntstatus.h:1205
#define RPC_S_INVALID_STRING_BINDING
Definition: winerror.h:1011
#define RPC_S_NOT_ALL_OBJS_UNEXPORTED
Definition: winerror.h:1066
#define EPT_NT_INVALID_ENTRY
Definition: ntstatus.h:1227
#define RPC_NT_WRONG_KIND_OF_BINDING
Definition: ntstatus.h:1180
#define RPC_S_PROTSEQ_NOT_FOUND
Definition: winerror.h:1052
#define RPC_S_INVALID_ASYNC_HANDLE
Definition: winerror.h:1156
#define RPC_S_UNKNOWN_AUTHN_TYPE
Definition: winerror.h:1049
#define RPC_S_ALREADY_REGISTERED
Definition: winerror.h:1022
#define RPC_NT_NO_MORE_BINDINGS
Definition: ntstatus.h:1249
#define RPC_NT_SERVER_UNAVAILABLE
Definition: ntstatus.h:1201
#define RPC_NT_NO_BINDINGS
Definition: ntstatus.h:1197
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define RPC_S_CANT_CREATE_ENDPOINT
Definition: winerror.h:1031
#define RPC_NT_SS_CHAR_TRANS_SHORT_FILE
Definition: ntstatus.h:1267
#define RPC_NT_UUID_NO_ADDRESS
Definition: ntstatus.h:1215
#define RPC_S_STRING_TOO_LONG
Definition: winerror.h:1051
#define RPC_NT_NOT_LISTENING
Definition: ntstatus.h:1194
#define RPC_NT_PROTSEQ_NOT_FOUND
Definition: ntstatus.h:1220
#define RPC_NT_PROTSEQ_NOT_SUPPORTED
Definition: ntstatus.h:1182
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define RPC_X_PIPE_DISCIPLINE_ERROR
Definition: winerror.h:1159
#define RPC_NT_ADDRESS_ERROR
Definition: ntstatus.h:1244
#define RPC_S_FP_DIV_ZERO
Definition: winerror.h:1077
LONG WINAPI I_RpcMapWin32Status(RPC_STATUS status)
Definition: rpcrt4_main.c:740

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 
254  status = RpcStringBindingComposeA(NULL, ncacn_ip_tcp, address,
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 }
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
GLint level
Definition: gl.h:1546
#define RPC_C_AUTHN_WINNT
Definition: rpcdce.h:158
RPC_STATUS WINAPI RpcBindingFree(RPC_BINDING_HANDLE *Binding)
Definition: rpc_binding.c:787
RPC_STATUS WINAPI RpcMgmtStopServerListening(RPC_BINDING_HANDLE Binding)
Definition: rpc_server.c:1596
#define TRUE
Definition: types.h:120
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
#define RPC_S_NO_PROTSEQS_REGISTERED
Definition: winerror.h:1025
#define todo_wine
Definition: custom.c:79
RPC_STATUS WINAPI RpcStringFreeA(RPC_CSTR *String)
Definition: rpcrt4_main.c:158
RPC_STATUS WINAPI RpcServerUnregisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, UINT WaitForCallsToComplete)
Definition: rpc_server.c:1202
long RPC_STATUS
Definition: rpc.h:52
#define FALSE
Definition: types.h:117
RPC_STATUS WINAPI RpcServerListen(UINT MinimumCallThreads, UINT MaxCalls, UINT DontWait)
Definition: rpc_server.c:1520
static RPC_IF_HANDLE IFoo_v0_0_s_ifspec
Definition: rpc.c:208
#define RPC_S_NOT_LISTENING
Definition: winerror.h:1026
#define RPC_C_AUTHN_LEVEL_PKT_PRIVACY
Definition: rpcdce.h:151
RPC_STATUS WINAPI RpcBindingFromStringBindingA(RPC_CSTR StringBinding, RPC_BINDING_HANDLE *Binding)
Definition: rpc_binding.c:840
RPC_STATUS WINAPI RpcServerUseProtseqEpA(RPC_CSTR Protseq, UINT MaxCalls, RPC_CSTR Endpoint, LPVOID SecurityDescriptor)
Definition: rpc_server.c:910
static const struct d3drm_matrix identity
Definition: frame.c:26
GLuint address
Definition: glext.h:9393
RPC_STATUS WINAPI RpcServerRegisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, RPC_MGR_EPV *MgrEpv)
Definition: rpc_server.c:1116
#define RPC_S_ALREADY_LISTENING
Definition: winerror.h:1024
#define RPC_S_INVALID_RPC_PROTSEQ
Definition: winerror.h:1015
#define RPC_S_BINDING_HAS_NO_AUTH
Definition: winerror.h:1054
Definition: nis.h:10
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
#define RPC_C_AUTHZ_NAME
Definition: rpcdce.h:168
unsigned int ULONG
Definition: retypes.h:1
RPC_STATUS WINAPI RpcMgmtWaitServerListen(void)
Definition: rpc_server.c:1539
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
static SERVICE_STATUS status
Definition: service.c:31
#define RPC_C_AUTHN_LEVEL_NONE
Definition: rpcdce.h:146
RPC_STATUS WINAPI RpcNetworkIsProtseqValidA(RPC_CSTR protseq)
#define RPC_S_OK
Definition: rpcnterr.h:22
Definition: ps.c:97

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 }
RPC_STATUS WINAPI RpcBindingFree(RPC_BINDING_HANDLE *Binding)
Definition: rpc_binding.c:787
long RPC_STATUS
Definition: rpc.h:52
#define RPC_S_INVALID_BINDING
Definition: winerror.h:1013
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

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  {
672  case STATUS_BREAKPOINT:
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 STATUS_ILLEGAL_INSTRUCTION
Definition: ntstatus.h:266
#define exception
Definition: math.h:26
#define STATUS_REG_NAT_CONSUMPTION
Definition: ntstatus.h:821
#define STATUS_GUARD_PAGE_VIOLATION
Definition: ntstatus.h:182
#define STATUS_BREAKPOINT
Definition: ntstatus.h:184
#define trace
Definition: atltest.h:70
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
void func_name(void)
#define WINAPI
Definition: msvc.h:6
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
#define STATUS_HANDLE_NOT_CLOSABLE
Definition: ntstatus.h:697
#define STATUS_PRIVILEGED_INSTRUCTION
Definition: ntstatus.h:386
#define STATUS_POSSIBLE_DEADLOCK
Definition: ntstatus.h:637
#define STATUS_INSTRUCTION_MISALIGNMENT
Definition: ntstatus.h:406
#define EXCEPTION_CONTINUE_SEARCH
Definition: excpt.h:86
#define STATUS_ACCESS_VIOLATION
Definition: ntstatus.h:242
#define ok(value,...)
Definition: atltest.h:57
#define STATUS_STACK_OVERFLOW
Definition: ntstatus.h:489
#define STATUS_DATATYPE_MISALIGNMENT
Definition: ntstatus.h:183
unsigned int ULONG
Definition: retypes.h:1
#define GetProcAddress(x, y)
Definition: compat.h:753
#define STATUS_IN_PAGE_ERROR
Definition: ntstatus.h:243
#define win_skip
Definition: test.h:160
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by START_TEST().

◆ test_RpcServerInqDefaultPrincName()

static void test_RpcServerInqDefaultPrincName ( void  )
static

Definition at line 870 of file rpc.c.

871 {
872  RPC_STATUS ret;
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;
893  ret = RpcServerInqDefaultPrincNameA( RPC_C_AUTHN_WINNT, &saved_principal );
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 
909  ret = RpcServerRegisterAuthInfoA( saved_principal, RPC_C_AUTHN_WINNT, NULL, NULL );
910  ok( ret == RPC_S_OK, "got %u\n", ret );
911 
912  RpcStringFreeA( &saved_principal );
914 }
#define RPC_C_AUTHN_WINNT
Definition: rpcdce.h:158
BOOLEAN WINAPI GetUserNameExA(EXTENDED_NAME_FORMAT NameFormat, LPSTR lpNameBuffer, PULONG nSize)
Definition: sspi.c:1044
#define RPC_C_AUTHN_DEFAULT
Definition: rpcdce.h:165
RPC_STATUS WINAPI RpcStringFreeA(RPC_CSTR *String)
Definition: rpcrt4_main.c:158
long RPC_STATUS
Definition: rpc.h:52
unsigned char * RPC_CSTR
Definition: rpcdce.h:45
static WCHAR username[]
Definition: url.c:32
#define GetProcessHeap()
Definition: compat.h:736
#define trace
Definition: atltest.h:70
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
int ret
#define RPC_S_UNKNOWN_AUTHN_SERVICE
Definition: winerror.h:1055
GLenum GLsizei len
Definition: glext.h:6722
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
unsigned int ULONG
Definition: retypes.h:1
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
RPC_STATUS WINAPI RpcServerRegisterAuthInfoA(RPC_CSTR ServerPrincName, ULONG AuthnSvc, RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn, LPVOID Arg)
Definition: rpc_server.c:1414
#define HeapFree(x, y, z)
Definition: compat.h:735
RPC_STATUS RPC_ENTRY RpcServerInqDefaultPrincNameA(ULONG AuthnSvc, RPC_CSTR *PrincName)
Definition: rpc_server.c:1481
#define RPC_S_OK
Definition: rpcnterr.h:22

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
long RPC_STATUS
Definition: rpc.h:52
#define RPC_S_UNKNOWN_AUTHN_SERVICE
Definition: winerror.h:1055
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

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);
939  if (status == RPC_S_NO_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 */
969  status = RpcServerUseProtseqA(np, 0, NULL);
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 */
1001  status = RpcServerUseProtseqA(np, 0, NULL);
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
#define TRUE
Definition: types.h:120
#define RPC_S_NO_BINDINGS
Definition: winerror.h:1029
RPC_STATUS WINAPI RpcStringFreeA(RPC_CSTR *String)
Definition: rpcrt4_main.c:158
#define RPC_S_INVALID_ENDPOINT_FORMAT
Definition: winerror.h:1017
RPC_STATUS WINAPI RpcServerUseProtseqA(RPC_CSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor)
Definition: rpc_server.c:1060
long RPC_STATUS
Definition: rpc.h:52
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned char * RPC_CSTR
Definition: rpcdce.h:45
RPC_STATUS WINAPI RpcBindingToStringBindingA(RPC_BINDING_HANDLE Binding, RPC_CSTR *StringBinding)
Definition: rpc_binding.c:920
#define RPC_S_PROTSEQ_NOT_SUPPORTED
Definition: winerror.h:1014
RPC_STATUS WINAPI RpcServerInqBindings(RPC_BINDING_VECTOR **BindingVector)
Definition: rpc_server.c:861
#define trace
Definition: atltest.h:70
RPC_STATUS WINAPI RpcServerUseProtseqEpA(RPC_CSTR Protseq, UINT MaxCalls, RPC_CSTR Endpoint, LPVOID SecurityDescriptor)
Definition: rpc_server.c:910
RPC_BINDING_HANDLE BindingH[1]
Definition: rpcdce.h:58
RPC_STATUS WINAPI RpcBindingVectorFree(RPC_BINDING_VECTOR **BindingVector)
Definition: rpc_binding.c:802
#define broken(x)
Definition: _sntprintf.h:21
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
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
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
unsigned int ULONG
Definition: retypes.h:1
static SERVICE_STATUS status
Definition: service.c:31
#define win_skip
Definition: test.h:160
#define RPC_S_OK
Definition: rpcnterr.h:22
Definition: ps.c:97

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 }
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 RpcStringFreeA(RPC_CSTR *String)
Definition: rpcrt4_main.c:158
long RPC_STATUS
Definition: rpc.h:52
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
Definition: sock.c:82
unsigned char * RPC_CSTR
Definition: rpcdce.h:45
RPC_STATUS WINAPI RpcBindingToStringBindingA(RPC_BINDING_HANDLE Binding, RPC_CSTR *StringBinding)
Definition: rpc_binding.c:920
RPC_STATUS WINAPI RpcBindingFromStringBindingA(RPC_CSTR StringBinding, RPC_BINDING_HANDLE *Binding)
Definition: rpc_binding.c:840
GLuint address
Definition: glext.h:9393
Definition: nis.h:10
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
static SERVICE_STATUS status
Definition: service.c:31
#define RPC_S_OK
Definition: rpcnterr.h:22
Definition: ps.c:97

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 }
#define todo_wine
Definition: custom.c:79
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
RPC_STATUS WINAPI RpcStringFreeA(RPC_CSTR *String)
Definition: rpcrt4_main.c:158
long RPC_STATUS
Definition: rpc.h:52
#define FALSE
Definition: types.h:117
typedef uuid
int options
Definition: main.c:106
struct endpoint endpoint
Definition: nis.h:15
#define RPC_S_INVALID_STRING_UUID
Definition: winerror.h:1016
Definition: nis.h:10
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
Definition: msctf.idl:510
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
#define RPC_S_INVALID_STRING_BINDING
Definition: winerror.h:1011
static SERVICE_STATUS status
Definition: service.c:31
#define RPC_S_OK
Definition: rpcnterr.h:22
Definition: ps.c:97

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 }
RPC_STATUS WINAPI RpcStringFreeW(RPC_WSTR *String)
Definition: rpcrt4_main.c:175
unsigned short * RPC_WSTR
Definition: rpcdce.h:46
#define GetProcessHeap()
Definition: compat.h:736
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
#define skip(...)
Definition: atltest.h:64

Referenced by START_TEST().

◆ test_towers()

static void test_towers ( void  )
static

Definition at line 339 of file rpc.c.

340 {
341  RPC_STATUS ret;
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  {
374  unsigned32 i;
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 }
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
coclass MSXML2::XSLTemplate40 object
void WINAPI I_RpcFree(void *Object)
Definition: rpcrt4_main.c:724
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
long RPC_STATUS
Definition: rpc.h:52
unsigned int BOOL
Definition: ntddk_ex.h:94
Definition: rpc.c:44
byte tower_octet_string[1]
Definition: rpc.c:47
RPC_STATUS WINAPI TowerExplode(const twr_t *tower, RPC_SYNTAX_IDENTIFIER *object, RPC_SYNTAX_IDENTIFIER *syntax, char **protseq, char **endpoint, char **address)
#define printf
Definition: freeldr.h:94
struct endpoint endpoint
Definition: nis.h:15
GLuint address
Definition: glext.h:9393
int ret
static const unsigned char tower_data_tcp_ip1[]
Definition: rpc.c:311
static const unsigned char tower_data_tcp_ip2[]
Definition: rpc.c:325
#define broken(x)
Definition: _sntprintf.h:21
unsigned32 tower_length
Definition: rpc.c:46
#define RPC_S_INVALID_RPC_PROTSEQ
Definition: winerror.h:1015
Definition: nis.h:10
unsigned int unsigned32
Definition: rpc.c:43
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
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
#define win_skip
Definition: test.h:160
#define RPC_S_OK
Definition: rpcnterr.h:22

Referenced by START_TEST().

◆ test_UuidCreate()

static void test_UuidCreate ( void  )
static

Definition at line 722 of file rpc.c.

723 {
724  UUID guid;
725  BYTE version;
726 
727  UuidCreate(&guid);
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 
753  UuidCreate(&guid);
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 }
const char * wine_dbgstr_guid(const GUID *guid)
int WINAPI UuidEqual(UUID *Uuid1, UUID *Uuid2, RPC_STATUS *Status)
Definition: rpcrt4_main.c:252
long RPC_STATUS
Definition: rpc.h:52
const GUID * guid
unsigned char * LPBYTE
Definition: typedefs.h:53
static const WCHAR version[]
Definition: asmname.c:66
GLenum src
Definition: glext.h:6340
unsigned char BYTE
Definition: xxhash.c:193
#define broken(x)
Definition: _sntprintf.h:21
RPC_STATUS WINAPI UuidCreate(UUID *Uuid)
Definition: rpcrt4_main.c:305
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
#define ok(value,...)
Definition: atltest.h:57
GLenum GLenum dst
Definition: glext.h:6340

Referenced by START_TEST().

◆ test_UuidCreateSequential()

static void test_UuidCreateSequential ( void  )
static

Definition at line 778 of file rpc.c.

779 {
780  UUID guid1;
781  BYTE version;
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");
784  RPC_STATUS ret;
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 }
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
const char * wine_dbgstr_guid(const GUID *guid)
long RPC_STATUS
Definition: rpc.h:52
static GUID guid2
Definition: devinst.c:42
static const WCHAR version[]
Definition: asmname.c:66
#define WINAPI
Definition: msvc.h:6
int ret
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
unsigned char BYTE
Definition: xxhash.c:193
#define broken(x)
Definition: _sntprintf.h:21
#define ok(value,...)
Definition: atltest.h:57
#define GetProcAddress(x, y)
Definition: compat.h:753
#define win_skip
Definition: test.h:160
#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 }
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
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:423
#define RPC_S_NOT_RPC_ERROR
Definition: winerror.h:1130
unsigned long DWORD
Definition: ntddk_ex.h:95
#define RPC_S_INVALID_STRING_UUID
Definition: winerror.h:1016
#define FORMAT_MESSAGE_IGNORE_INSERTS
Definition: winbase.h:420
#define ARRAY_SIZE(a)
Definition: main.h:24
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
RPC_STATUS RPC_ENTRY DceErrorInqTextA(RPC_STATUS e, RPC_CSTR buffer)
Definition: rpcrt4_main.c:697
#define RPC_S_OK
Definition: rpcnterr.h:22

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)
620  return RPC_S_OUT_OF_RESOURCES;
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 }
void WINAPI I_RpcFree(void *Object)
Definition: rpcrt4_main.c:724
unsigned short MajorVersion
Definition: rpcdcep.h:27
#define EPM_PROTOCOL_UUID
Definition: epm_towers.h:35
long RPC_STATUS
Definition: rpc.h:52
RPC_STATUS RpcTransport_GetTopOfTower(unsigned char *tower_data, size_t *tower_size, const char *protseq, const char *networkaddr, const char *endpoint) DECLSPEC_HIDDEN
u_int16 count_rhs
Definition: epm_towers.h:61
RPC_VERSION SyntaxVersion
Definition: rpcdcep.h:33
u_int16 count_lhs
Definition: epm_towers.h:57
Definition: rpc.c:44
#define TRACE(s)
Definition: solgame.cpp:4
unsigned short u_int16
Definition: dcetypes.idl:33
#define debugstr_a
Definition: kernel32.h:31
GLuint address
Definition: glext.h:9393
u_int16 major_version
Definition: epm_towers.h:60
unsigned short MinorVersion
Definition: rpcdcep.h:28
Definition: nis.h:10
u_int16 minor_version
Definition: epm_towers.h:62
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define RPC_S_OUT_OF_RESOURCES
Definition: winerror.h:1032
#define NULL
Definition: types.h:112
GLfloat GLfloat p
Definition: glext.h:8902
static SERVICE_STATUS status
Definition: service.c:31
void *WINAPI I_RpcAllocate(unsigned int Size)
Definition: rpcrt4_main.c:716
#define RPC_S_OK
Definition: rpcnterr.h:22
Definition: ps.c:97

Referenced by epm_register(), ept_map(), RpcEpResolveBinding(), RpcEpUnregister(), and 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 }
RPC_STATUS WINAPI RpcStringFreeW(RPC_WSTR *String)
Definition: rpcrt4_main.c:175
char CHAR
Definition: xmlstorage.h:175
static UUID Uuid_Table[10]
Definition: rpc.c:53
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
int WINAPI UuidEqual(UUID *Uuid1, UUID *Uuid2, RPC_STATUS *Status)
Definition: rpcrt4_main.c:252
char * LPSTR
Definition: xmlstorage.h:182
RPC_STATUS WINAPI RpcStringFreeA(RPC_CSTR *String)
Definition: rpcrt4_main.c:158
static BOOL Uuid_Comparison_Grid[11][11]
Definition: rpc.c:67
long RPC_STATUS
Definition: rpc.h:52
RPC_STATUS WINAPI UuidToStringA(UUID *Uuid, RPC_CSTR *StringUuid)
Definition: rpcrt4_main.c:514
RPC_STATUS WINAPI UuidFromStringW(RPC_WSTR s, UUID *uuid)
Definition: rpcrt4_main.c:614
const WCHAR * str
__wchar_t WCHAR
Definition: xmlstorage.h:180
RPC_STATUS WINAPI UuidToStringW(UUID *Uuid, RPC_WSTR *StringUuid)
Definition: rpcrt4_main.c:540
#define RPC_S_INVALID_STRING_UUID
Definition: winerror.h:1016
#define ok(value,...)
Definition: atltest.h:57
#define NULL
Definition: types.h:112
RPC_STATUS WINAPI UuidFromStringA(RPC_CSTR s, UUID *uuid)
Definition: rpcrt4_main.c:574
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define RPC_S_OK
Definition: rpcnterr.h:22

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().