/*++ Copyright (c) 1992 Microsoft Corporation Module Name: cbind.cxx Abstract: This is the client side NSI service support layer. These functions provide for binding to the locator or other name server. Author: Steven Zeck (stevez) 03/04/92 --*/ extern "C" { #define NSI_ASCII #include #ifndef USHORT #define USHORT unsigned short #endif #include #include #include } // extern "C" RPC_BINDING_HANDLE NsiClntBinding = NULL;// global binding handle to locator WIDE_STRING *DefaultName; long DefaultSyntax = RPC_C_NS_SYNTAX_DCE; int fSyntaxDefaultsLoaded; unsigned char * RegGetString( IN void * RegHandle, IN char * KeyName ) /*++ Routine Description: Get a string from the registery. Arguments: KeyName - name of key to lookup. Returns: pointer to the allocated string, or Nil if not found --*/ { char Buffer[300]; DWORD BufferLength = sizeof(Buffer); DWORD Type; if (RegQueryValueEx((HKEY)RegHandle, KeyName, 0, &Type, (unsigned char far*)Buffer, &BufferLength)) return(0); return(CopyString(Buffer)); } RPC_STATUS RPC_ENTRY I_NsClientBindSearch( ) /*++ Routine Description: The function binds to the locator, first it tries to bind to a local machine, then it attempts to bind to the domain controller. Arguments: BindingSearchContext - context of search for the locator. Returns: RPC_S_OK, RPC_S_NO_BINDINGS, RPC_S_CANNOT_BIND, RPC_S_OUT_OF_RESOURCES --*/ { RPC_STATUS RpcStatus; long status; unsigned char * Protseq; unsigned char * NetworkAddress; unsigned char * Endpoint; unsigned char * StringBinding; HKEY RegHandle; if (NsiClntBinding != NULL) { return (RPC_S_NAME_SERVICE_UNAVAILABLE); } status = RegOpenKeyEx(RPC_REG_ROOT, REG_NSI, 0L, KEY_READ, &RegHandle); if (status) { return(RPC_S_NAME_SERVICE_UNAVAILABLE); } Protseq = RegGetString((void *) RegHandle, "Protocol"); if (Protseq == NULL) { return(RPC_S_NAME_SERVICE_UNAVAILABLE); } NetworkAddress = RegGetString((void *) RegHandle, "NetworkAddress"); if (NetworkAddress == NULL) { return (RPC_S_NAME_SERVICE_UNAVAILABLE); } Endpoint = RegGetString((void *) RegHandle, "Endpoint"); if (Endpoint == NULL) { return (RPC_S_NAME_SERVICE_UNAVAILABLE); } GetDefaultEntrys((void *)RegHandle); RpcStatus = RpcStringBindingCompose(0, Protseq, NetworkAddress, Endpoint, 0, &StringBinding); if (RpcStatus != RPC_S_OK) { return(status); } RpcStatus = RpcBindingFromStringBinding(StringBinding, &NsiClntBinding); RpcStringFree(&StringBinding); return (RpcStatus); } void RPC_ENTRY I_NsClientBindDone( ) /*++ Routine Description: The function cleans up after binding to the locator. Returns: --*/ { RPC_STATUS RpcStatus; RpcStatus = RpcBindingFree(&NsiClntBinding); ASSERT(!RpcStatus); }