|
|
1.1 ! root 1: More Information about Microsoft RPC version 1.0 ! 2: ____________________________________________________________ ! 3: ! 4: This document contains important information about Microsoft RPC version ! 5: 1.0 that is not included in the Microsoft RPC Programmer's Guide and ! 6: Reference or in help. ! 7: ! 8: Using Notepad to View This Document ! 9: ! 10: To move through this document, press PAGE UP and PAGE DOWN or click the ! 11: arrows at the top and bottom of the scroll bar along the right side of ! 12: the window. ! 13: ! 14: To print this document, choose the Print command from the File menu. ! 15: ! 16: For help on using Notepad, press F1. ! 17: ! 18: ____________________________________________________________ ! 19: ! 20: Introduction ! 21: ! 22: Microsoft RPC version 1.0 is a toolkit for developing network-aware ! 23: distributed applications in C/C++. The RPC toolkit includes: ! 24: ! 25: o MIDL compilers for Microsoft Windows NT and MS-DOS ! 26: ! 27: o C/C++ language header files (.H) and run-time libraries ! 28: (.LIB and .DLL) for Microsoft Windows NT, Microsoft ! 29: Windows, and MS-DOS ! 30: ! 31: o Sample programs for Microsoft Windows NT, Microsoft ! 32: Windows, Microsoft Windows for Workgroups, and MS-DOS ! 33: ! 34: o RPC reference Help files and PostScript(TM) files ! 35: ! 36: The Microsoft Windows NT SDK contains the Microsoft Windows NT and ! 37: Microsoft Windows 3.x/MS-DOS versions of the RPC SDK. ! 38: ! 39: Installation ! 40: ! 41: The Microsoft Windows NT SDK installs the components of the Microsoft ! 42: Windows NT RPC SDK as part of its standard installation. No additional ! 43: installation is required. ! 44: ! 45: To develop client-side distributed applications for MS-DOS, Microsoft ! 46: Windows 3.x, and Windows for Workgroups version 3.1, you must install ! 47: the Microsoft Windows 3.x/MS-DOS version of the RPC toolkit. Cross- ! 48: compilation of Windows 3.x and MS-DOS clients on Windows NT requires a ! 49: 16-bit C compiler in the Microsoft Windows NT environment. This ! 50: development environment is not installed during RPC SDK setup. The ! 51: Microsoft RPC SDK for MS-DOS and Microsoft Windows requires: ! 52: ! 53: o Microsoft C/C++ version 7.0 ! 54: ! 55: o DOS protected-mode interface (DPMI) server that ! 56: supports version 0.9 or later of the DPMI specification and ! 57: the MS-DOS extensions to the DPMI (Microsoft Windows or ! 58: Windows for Workgroups versions 3.1) ! 59: ! 60: o Either Microsoft Windows for Workgroups version 3.1 or ! 61: Microsoft LAN Manager version 2.1 with NetBEUI, Named Pipes, ! 62: or TCP/IP ! 63: ! 64: To install the Microsoft Windows and MS-DOS version of the RPC toolkit, ! 65: run the Setup program in the directory MSTOOLS\ RPC_DOS\NSETUP. To start ! 66: the Setup program, choose the Run command from the File menu in the ! 67: Microsoft Windows 3.x Program Manager ! 68: ! 69: When you install the RPC SDK in a directory different from the directory ! 70: you used for Microsoft C/C++ version 7.0, you must set the environment ! 71: variables INCLUDE, LIB, and PATH to point to the directories that ! 72: contain the RPC header files, libraries, and DLLs and binaries, ! 73: respectively. When you install the RPC SDK in the same directory as the ! 74: directory you used for Microsoft C/C++ version 7.0, these environment ! 75: variables are already set by the C/C++ version 7.0 installation program. ! 76: ! 77: RPC Documentation ! 78: ! 79: The following Microsoft RPC version 1.0 reference materials are ! 80: available in published book form and in PostScript file format: ! 81: ! 82: Microsoft RPC Programmer's Guide and Reference ! 83: Part I: Programmer's Guide ! 84: Part II: Run-time API Reference ! 85: Part III: MIDL Language Reference ! 86: ! 87: Use the PostScript files to print individual chapters of the ! 88: documentation on your PostScript printer. ! 89: ! 90: The following run-time and MIDL reference Help files are available on ! 91: line: ! 92: ! 93: RPC10WH.HLP WinHelp run-time API reference ! 94: RPC10QH.HLP QuickHelp run-time API reference ! 95: MIDL10WH.HLP WinHelp MIDL reference ! 96: MIDL10QH.HLP QuickHelp MIDL reference ! 97: ! 98: RPC sample-program source files are available in the directory ! 99: MSTOOLS\SAMPLES\RPC. MS-DOS and Microsoft Windows versions of some ! 100: samples are available when you install the MS-DOS and Microsoft Windows ! 101: 3.x version of the RPC SDK. You must compile the client samples on the ! 102: client computer. The file MSTOOLS\SAMPLES\RPC\README.TXT describes each ! 103: sample. ! 104: ! 105: ____________________________________________________________ ! 106: ! 107: Contents ! 108: ! 109: These release notes contain additional information on the following ! 110: topics: ! 111: ! 112: 1.0 DCE interoperability issues ! 113: ! 114: 2.0 Gateway required for DCE NSI API interoperability ! 115: ! 116: 3.0 Using Microsoft RPC with Microsoft Windows for Workgroups ! 117: ! 118: 4.0 Packing and alignment considerations ! 119: ! 120: 5.0 MIDL switch "-env generic" not supported ! 121: ! 122: 6.0 C stub source code causes compilation warnings ! 123: ! 124: 7.0 Updated command line help for the MIDL compiler ! 125: ! 126: 8.0 Creating installation disks for your application ! 127: ! 128: 9.0 Running the locator and endpoint mapper ! 129: ! 130: 10.0 Updating RPC registry entries for new NetBIOS configurations ! 131: ! 132: 11.0 Support for multiple locators ! 133: ! 134: 12.0 NetBIOS requires larger MS-DOS application stack ! 135: ! 136: 13.0 Using the new C _stdcall calling convention with RPC ! 137: ! 138: 14.0 RpcWinSetYieldInfo not supported for Win32 applications ! 139: ! 140: 15.0 Uuidgen utility provided for Microsoft Windows NT ! 141: ! 142: 16.0 Use NULL security descriptor with RpcUseAllProtseqs ! 143: ! 144: 17.0 Leading zeroes in version numbers do not create unique values ! 145: ! 146: 18.0 Const initialization ! 147: ! 148: 19.0 Include three header files in your distributed applications ! 149: ! 150: 20.0 Context handle issues ! 151: ! 152: 21.0 Only one error_status_t parameter allowed ! 153: ! 154: 22.0 Unsized arrays issues ! 155: ! 156: 23.0 Separate in, out parameters to avoid memory orphaning ! 157: ! 158: 24.0 Small model application development not supported ! 159: ! 160: 25.0 Single process cannot be client, server using NetBIOS ! 161: ! 162: 26.0 Escape sequences not correct in the generated header files ! 163: ! 164: 27.0 Ncalrpc transport issues ! 165: ! 166: 28.0 RpcNsBindingExport requires non-null interface parameter ! 167: ! 168: 29.0 Configuring RPC name service for LAN Manager networks ! 169: ! 170: 30.0 Length_is applied to pointer causes error ! 171: ____________________________________________________________ ! 172: ! 173: 1.0 DCE interoperability issues ! 174: ! 175: The Microsoft RPC endpoint mapper and run-time libraries are compatible ! 176: with the DCE endpoint mapper interface. ! 177: ! 178: When you use the DCE Cell Directory Service, you must use a gateway to ! 179: the DCE server (see release note 2.0). ! 180: ! 181: Full pointers (pointers associated with the attribute [ptr]) are not ! 182: completely implemented in Microsoft RPC version 1.0. To allow ! 183: portability of DCE applications, the MIDL compiler treats full pointers ! 184: as unique pointers, which means that aliasing is not supported. The use ! 185: of full pointers that cause aliasing can lead to undefined results. ! 186: ! 187: DCE host names are case-sensitive. Specify the hostname exactly as it ! 188: appears or the client will not be able to locate the host server. ! 189: ! 190: In DCE-compatibility mode, the MIDL compiler provided with this beta ! 191: release of Microsoft RPC version 1.0 incorrectly accepts handles in ! 192: positions other than the first parameter. The MIDL compiler in DCE- ! 193: compatibility mode incorrectly does not accept BOOLEAN as a switch type. ! 194: ! 195: This beta release does not support the name service environment variable ! 196: RPC_DEFAULT_ENTRY_NAME, but it does provide an alternate method to ! 197: specify the default syntax. Microsoft RPC configuration settings are ! 198: available in the Microsoft Windows NT registry and in the MS-DOS and ! 199: Microsoft Windows 3.x file RPCREG.DAT. To change the default syntax, set ! 200: the registry entry SOFTWARE\Microsoft\Rpc\NameService\DefaultSyntax. ! 201: ! 202: Other differences between the Microsoft and DCE implementations are ! 203: documented in the RPC Programmer's Guide and Reference. ! 204: ! 205: 2.0 Gateway required for DCE NSI API interoperability ! 206: ! 207: When using Microsoft RPC version 1.0 for Microsoft Windows in an OSF DCE ! 208: environment, the DCE Cell Directory Service (CDS) is used as the RPC ! 209: name service. However, the OSF has not yet released a specification of ! 210: the protocol used to access the CDS. To allow interoperation between DCE ! 211: computers and RPC client applications that call RPC name service API ! 212: functions, you must use a gateway to the DCE CDS. ! 213: ! 214: To help you develop such a gateway, the Microsoft RPC SDK provides an ! 215: interface for a gateway protocol in the files SAMPLES\NS\CDS\NSICLT.IDL, ! 216: NSSVR.IDL, and NSICOM.IDL, and provides the client-side implementation ! 217: of this gateway protocol in RPCNS.DLL. One such implementation of the ! 218: server side gateway is currently available in the Digital Equipment ! 219: Corporation DCE Starter Kit. ! 220: ! 221: To use the gateway so that your RPC application can interoperate with ! 222: DCE RPC applications: ! 223: ! 224: 1) Verify that the gateway is started on the DCE host ! 225: ! 226: 2) Verify that the client is running the TCP/IP transport ! 227: ! 228: 3) (Microsoft Windows NT only) Set the registry entry ! 229: Software\Microsoft\Rpc\NameService\ServerNetworkAddress to a string of ! 230: the form "<ip address of gateway 1>; <ip address of gateway 2>...", ! 231: where <ip address of gateway n> is the ip address of the nth gateway in ! 232: the list. ! 233: ! 234: 4) Set the following registry entries under Software\ ! 235: Microsoft\Rpc\NameService to the following values: ! 236: ! 237: Entry Value ! 238: ! 239: Protocol ncacn_ip_tcp ! 240: NetworkAddress <ip addr gateway 1>; <ip addr gateway 2>... ! 241: Endpoint <empty string> ! 242: ! 243: To change registry entry settings on Microsoft Windows NT, use the ! 244: REGEDIT utility. On MS-DOS and Microsoft Windows, edit the text file ! 245: RPCREG.DAT. ! 246: ! 247: 3.0 Using Microsoft RPC with Microsoft Windows for Workgroups ! 248: ! 249: To successfully run Microsoft RPC distributed applications with ! 250: Microsoft Windows for Workgroups version 3.1, you must use the Windows ! 251: for Workgroups network services. Stop all real-mode network services ! 252: before starting Windows for Workgroups. At the MS-DOS prompt, enter: ! 253: ! 254: net stop workstation /y ! 255: win ! 256: ! 257: 4.0 Packing and Alignment Considerations ! 258: ! 259: You must use the same packing and alignment settings (/Zp switch) with ! 260: both the C compiler and the MIDL compiler. Using different packing ! 261: levels for each compiler causes undefined results. Default values are ! 262: set for each target operating system. You can specify the /Zp switch to ! 263: verify that the correct packing and alignment settings are used on both ! 264: compilers. ! 265: ! 266: For Microsoft Windows 3.x and MS-DOS-based distributed applications, use ! 267: one of the following two methods: ! 268: ! 269: a. Compile using /Zp2 with both the MIDL and C compilers ! 270: ! 271: b. Compile using any /Zp level (use the same level for both the MIDL ! 272: and C compilers; the level /Zp4 produces the most efficient marshalling ! 273: code) and add the following code to the files RPC.H and RPCNDR.H: ! 274: ! 275: #pragma pack(2) /* at start of rpc.h and rpcndr.h */ ! 276: ... ! 277: #pragma pack () /* at end, restore default level */ ! 278: ! 279: 5.0 MIDL switch "-env generic" not supported ! 280: ! 281: The MIDL compiler environment switch "-env generic" is not supported in ! 282: this version. When your target operating system is the same as the ! 283: development environment, you do not have to specify an environment ! 284: switch; the default settings are correct. Otherwise, use the specific ! 285: environment switch that corresponds to your target application ! 286: environment: "-env win32", "-env win16", or "-env dos". ! 287: ! 288: The MIDL compiler can generate C code for other platforms when you use ! 289: these switches. However, to cross-compile the C code for other ! 290: platforms, you must configure your C development environment. For ! 291: example, to cross-compile MS-DOS applications on a Microsoft Windows NT ! 292: computer, you must set up your computer to use a 16-bit C compiler, ! 293: include the correct header files, and link with the appropriate ! 294: libraries. A development environment that supports MS-DOS cross- ! 295: compilation is not provided during Microsoft Windows NT installation. ! 296: ! 297: 6.0 C Stub Source Code Causes Compilation Warnings ! 298: ! 299: The stub files generated by the MIDL compiler may generate warnings when ! 300: they are compiled at compiler warning level 3 and higher. These warnings ! 301: can generally be safely ignored. ! 302: ! 303: Unsigned character string arguments generate "incompatible pointer ! 304: assignment warnings" when you compile the stubs. The C run-time library ! 305: functions use char * arguments rather than unsigned char * arguments. ! 306: ! 307: When your C compiler does not use the same default character sign as the ! 308: MIDL compiler, use the MIDL compiler switch /char to generated explicit ! 309: declarations in the generated file. For more information, see the Microsoft ! 310: RPC Programmer's Guide and Reference. ! 311: ! 312: Compiler warning messages about unreferenced local variables, mismatched ! 313: comparisons between integral types, and mismatched pointer assignments ! 314: in stubs can be safely ignored. ! 315: ! 316: 7.0 Updated command line help ! 317: ! 318: The updated help text for the MIDL compiler appears as follows: ! 319: ! 320: -MIDL COMPILER OPTIONS- ! 321: -MODE- ! 322: /ms_ext Microsoft extensions mode ! 323: /app_config Application configuration mode ! 324: /implicit_local Assume non-remote data is [local] ! 325: ! 326: -INPUT- ! 327: /acf filename Specify the attribute configuration file ! 328: /I directory Specify directory for import and include files ! 329: /import ms_ext Support only used types; one file ! 330: /import ms_nt Support only used types; multiple files ! 331: /import osf Assume imported IDL files are compiled separately ! 332: /no_def_idir Ignore the current and the INCLUDE directories ! 333: ! 334: -OUTPUT FILE GENERATION- ! 335: /client all Generate client stub and aux files ! 336: /client aux Generate client auxiliary file only ! 337: /client none Generate no client files ! 338: /client stub Generate client stub file only ! 339: /out directory Destination directory for output files ! 340: /server all Generate server stub and aux files ! 341: /server aux Generate server aux file only ! 342: /server none Generate no server files ! 343: /server stub Generate server stub file only ! 344: /syntax_check Check syntax only; do not generate output files ! 345: /Zs Check syntax only; do not generate output files ! 346: ! 347: -OUTPUT FILE NAMES- ! 348: /caux filename Specify client auxiliary file name ! 349: /cstub filename Specify client stub file name ! 350: /cswtch filename Specify switch stub file name ! 351: /header filename Specify header file name ! 352: /saux filename Specify server auxiliary file name ! 353: /sstub filename Specify server stub file name ! 354: ! 355: -C COMPILER AND PREPROCESSOR OPTIONS- ! 356: /cpp_cmd cmd_line Specify name of C preprocessor ! 357: /cpp_opt options Specify additional C preprocessor options ! 358: /D name[=def] Pass #define name, optional value to C preprocessor ! 359: /no_cpp Turn off the C preprocessing option ! 360: /U name Remove any previous definition (undefine) ! 361: ! 362: -ENVIRONMENT- ! 363: /char signed C compiler default char is signed ! 364: /char unsigned C compiler default char is unsigned ! 365: /char ascii7 Char values limited to 0-127 ! 366: /env dos MS-DOS client ! 367: /env win16 Microsoft Windows 16-bit (Win 3.x) ! 368: /env win32 Microsoft Windows 32-bit (NT) ! 369: /env generic Produce one header for all environments ! 370: ! 371: -ERROR AND WARNING MESSAGES- ! 372: /error all Check for all types of errors ! 373: /error allocation Check for out of memory errors ! 374: /error enum Check for errors converting long, short enum ! 375: /no_warn Suppress compiler warning messages ! 376: /W{0|1|2|3|4} Warning level 0-4 (default = 1) ! 377: /warn{0|1|2|3|4} Warning level 0-4 (default = 1) ! 378: /WX Treat all warnings as errors ! 379: ! 380: -OPTIMIZATION- ! 381: /pack {1|2|4|8} Designate packing level of structures ! 382: /Zp{1|2|4|8} Designate packing level of structures ! 383: ! 384: -MISCELLANEOUS- ! 385: @response_file Accept input from a response file ! 386: /? List MIDL compiler switch settings ! 387: /confirm Display options without compiling MIDL source ! 388: /help Display a list of MIDL compiler switches ! 389: /prefix "s1" "s2" Replace default suffix "s1" with prefix "s2" ! 390: ! 391: 8.0 Creating installation disks for your application ! 392: ! 393: Your distributed application's installation program must set up the RPC ! 394: runtime for users. Two batch files help you create RPC run-time ! 395: installation disks that can accompany your distributed application. ! 396: These batch files create installation disks that contain the Setup ! 397: program and the Microsoft RPC run-time libraries, allowing you to ! 398: distribute the Microsoft RPC run-time libraries with your distributed ! 399: application. The following two batch files are provided: ! 400: ! 401: wrundisk.bat creates Microsoft Windows/MS-DOS run-time install disk ! 402: drundisk.bat creates MS-DOS-only run-time install disk ! 403: ! 404: 8.1 Creating installation disks for Microsoft Windows applications ! 405: ! 406: Insert a formatted, blank floppy disk in the destination drive. Start ! 407: the installation disk utility by typing "wrundisk" followed by the ! 408: optional source and destination drive names. The wrundisk.bat file uses ! 409: the following syntax: ! 410: ! 411: wrundisk [source:[path] [dest:]] ! 412: ! 413: where ! 414: ! 415: source is a disk or directory that contains the compressed files that ! 416: are provided in the Microsoft Windows NT SDK directory ! 417: \mstools\rpc_dos\disk1. ! 418: ! 419: dest is a drive name specifying the drive that contains the formatted, ! 420: blank floppy disk. ! 421: ! 422: For example,"wrundisk c:\nt\mstools\rpc_dos\disk1 a:" copies the ! 423: compressed files to the floppy disk in the drive A. ! 424: ! 425: Your application user can then insert the resulting installation disk in ! 426: her computer's floppy drive and run its Setup from Microsoft Windows to ! 427: install the RPC run-time libraries for Microsoft Windows and MS-DOS. ! 428: ! 429: 8.2 Installation disks for MS-DOS Distributed Applications ! 430: ! 431: The drundisk utility copies files from an installed RPC SDK. To ensure ! 432: that all MS-DOS loadable transports are present on the run-time ! 433: installation disk, you must select all loadable transports at the time ! 434: you install the Microsoft RPC SDK. ! 435: ! 436: Insert a formatted, blank floppy disk in the destination drive. Start ! 437: the installation utility by typing "drundisk" followed by the optional ! 438: source and destination drive names. The drundisk.bat file uses the ! 439: following syntax: ! 440: ! 441: drundisk [directory [dest:]] ! 442: ! 443: where directory is the name of the directory that contains all loadable ! 444: transport (.RPC) files and all name service dynamic link libraries. ! 445: ! 446: For example, the command "drundisk c:\lanman.dos\netprog a:" copies the ! 447: MS-DOS run-time libraries, the loadable transport files, and name ! 448: service DLLs from the C hard drive to the floppy disk in drive A. Your ! 449: application user can then use the Setup program on the run-time ! 450: installation disk to install the RPC run-time libraries. ! 451: ! 452: 9.0 Running the locator and endpoint mapper ! 453: ! 454: In this release of Microsoft RPC version 1.0, the locator and endpoint ! 455: mapper are not provided as services but as programs that you must start ! 456: from the Microsoft Windows NT command line. The locator is the Microsoft ! 457: implementation of the RPC name service independent API functions (NSI). ! 458: The endpoint mapper allows the use of dynamic endpoints. ! 459: ! 460: Start the locator using the following command syntax: ! 461: ! 462: locator /noservice ! 463: ! 464: Start the endpoint mapper on the RPC server using the following syntax: ! 465: ! 466: rpcss noservice ! 467: ! 468: Start the locator and endpoint mapper before starting the server ! 469: application. ! 470: ! 471: Note: These services are not complete in this beta release of Microsoft ! 472: RPC version 1.0. The endpoint mapper does not support dynamic endpoints ! 473: for the TCP/IP transport on MIPS computers and does not support dynamic ! 474: endpoints for NetBIOS transports. The locator service does not start ! 475: automatically in this beta release. In a LAN Manager network ! 476: environment, you must start the locator service on the primary domain ! 477: controller and on each RPC server. For more information about ! 478: configuring the RPC Name Service, see release notes 2.0 and 29.0. ! 479: ! 480: 10.0 Updating RPC registry entries for new NetBIOS configurations ! 481: ! 482: The Microsoft RPC Setup program automatically maps protocol strings to ! 483: NetBIOS lana numbers and writes these settings in the registry. These ! 484: mappings work as long as you only have one network card and one network ! 485: protocol. If this is not the case, or if you change your network ! 486: configuration after installing Microsoft RPC, you must update the ! 487: registry to indicate the new correspondences between protocol strings ! 488: and NetBIOS lana numbers. ! 489: ! 490: For Microsoft Windows NT, the mapping string appears in the registry ! 491: tree under \Software\Microsoft\Rpc\NetBios. For MS-DOS, the mapping ! 492: string appears in the registry file RPCREG.DAT. ! 493: ! 494: The mapping string uses the following syntax: ! 495: ! 496: ncacn_nb_<protocol><digit> = <lana_number> ! 497: ! 498: where ! 499: ! 500: <protocol> indicates the protocol type. For MS-DOS, the valid <protocol> ! 501: value is "nb". For Microsoft Windows NT, valid <protocol> values are as ! 502: follows: ! 503: ! 504: <protocol> Protocol type ! 505: ! 506: xns XNS ! 507: nb NetBEUI ! 508: tcpip TCP/IP ! 509: ! 510: <digit> indicates a unique digit associated with each instance of a ! 511: protocol. Use the value 0 for the first instance of a protocol and use ! 512: the next consecutive digit for each additional instance of that ! 513: protocol. For example, assign the value ncacn_nb_nb0 to the first ! 514: NetBEUI entry; assign the value ncacn_nb_nb1 to the second NetBEUI ! 515: entry. ! 516: ! 517: <lana_number> indicates the NetBIOS lana number. A unique lana number is ! 518: associated with each network adapter present in the computer. For LAN ! 519: Manager networks, the lana numbers for each network card are available ! 520: in the configuration files LANMAN.INI and PROTOCOL.INI. For more ! 521: information about the lana number, see your network documentation. ! 522: ! 523: For example, the following mapping string describes a configuration that ! 524: uses the NetBEUI protocol over an adapter card that is assigned lana ! 525: number 0: ! 526: ! 527: ncacn_nb_nb0=0 ! 528: ! 529: When you install a second card that supports both XNS and NetBEUI ! 530: protocols, the mapping strings appear as follows: ! 531: ! 532: ncacn_nb_nb0=0 ! 533: ncacn_nb_nb1=1 ! 534: ncacn_nb_xns0=2 ! 535: ! 536: 11.0 Support for multiple locators ! 537: ! 538: This release supports cooperation among multiple locators when the ! 539: primary locator is an i386 computer. Each locator passes its request to ! 540: the computer specified in the registry entry ! 541: "SOFTWARE\Microsoft\Rpc\NameService\NetworkAddress". The default value ! 542: for this registry entry specifies the primary domain controller as the ! 543: primary locator. ! 544: ! 545: For more information about the locator, see release notes 2.0 and 29.0. ! 546: ! 547: 12.0 NetBIOS requires larger MS-DOS application stack ! 548: ! 549: The NetBIOS transport provided with this release of Microsoft RPC ! 550: version 1.0 for MS-DOS requires a 4K stack. You can set a 4K stack for ! 551: your applications with the linker option "/stack:4096" or with the ! 552: exehdr utility. ! 553: ! 554: The link /stack option that sets the size of the stack to 4K is as ! 555: follows: ! 556: ! 557: link /stack:0x1000 ! 558: ! 559: The exehdr utility uses the following syntax: ! 560: ! 561: exehdr /stack:0x1000 appname ! 562: ! 563: where ! 564: ! 565: appname is the name of your application. For example, to set the ! 566: required NetBIOS stack size for the helloc.exe sample program, enter the ! 567: command: ! 568: ! 569: exehdr /stack:0x1000 helloc.exe ! 570: ! 571: See your Microsoft C/C++ version 7.0 documentation for more information ! 572: about these options. ! 573: ! 574: 13.0 Using the new C _stdcall calling convention with RPC ! 575: ! 576: Microsoft Win32 API functions (including the Microsoft RPC API ! 577: functions) are defined using the C language keyword _stdcall. This ! 578: keyword specifies a calling convention in which arguments are pushed ! 579: onto the stack in the same order as the C language calling convention, ! 580: but the called function (rather than the caller) pops the arguments. ! 581: ! 582: Functions defined with _stdcall cannot use a variable number of ! 583: arguments. The new C calling convention is also applied when you use the ! 584: C compiler switch /Gz. ! 585: ! 586: The old C language calling convention is specified using the C language ! 587: keyword _cdecl or the C compiler switch /Gd. ! 588: ! 589: When your application combines old C and new C calling conventions, you ! 590: must take care to specify the correct function prototypes, C compiler ! 591: switches, and linker options for these calling conventions. ! 592: ! 593: This beta release of the Microsoft RPC MIDL compiler generates C code ! 594: stub files that do not specify the _stdcall calling convention keyword ! 595: (or macros that map to _stdcall). When you compile the server stubs with ! 596: the old C calling convention, calls from the RPC server run-time library ! 597: to the server stubs do not operate correctly. ! 598: ! 599: A workaround is to specify the C compiler switch /Gz to select the ! 600: _stdcall calling convention at compile time. Because the main() routine ! 601: takes a variable number of arguments, it cannot be declared as _stdcall. ! 602: You must explicitly declare main() as old C calling convention by using ! 603: either the _cdecl keyword or the _CRTAPI1 macro. The RPC sample programs ! 604: and makefiles demonstrate this workaround. ! 605: ! 606: For more information about the _stdcall and _cdecl calling conventions, ! 607: see the Microsoft C/C++ compiler documentation provided with Microsoft ! 608: Windows NT. ! 609: ! 610: 14.0 RpcWinSetYieldInfo not supported for Win32 applications, TCP/IP ! 611: ! 612: The RPC API function RpcWinSetYieldInfo is provided for use with Win 3.x ! 613: applications only. The ability to yield during RPC calls in the ! 614: Microsoft Windows 3.x environment provides the following benefits: ! 615: ! 616: o other Windows 3.x applications are not blocked during ! 617: a lengthy remote procedure call ! 618: ! 619: o the application that makes the remote call can ! 620: continue to process messages such as WM_PAINT ! 621: ! 622: o users can choose to cancel the remote call ! 623: ! 624: The function RpcWinSetYieldInfo is not supported in the Win32 ! 625: environment in this release. The yield capability provided by this ! 626: function is not as important in the Win32 environment as it is in the ! 627: Windows 3.x environment. The Win32 preemptive multitasking environment ! 628: lets you design your application to use multiple threads and allows your ! 629: applications to run with other applications. ! 630: ! 631: In this beta release, the function RpcWinSetYieldInfo has no effect when ! 632: RPC calls are made over the TCP/IP transport. ! 633: ! 634: 15.0 Uuidgen utility provided for Microsoft Windows NT ! 635: ! 636: This release of the Microsoft RPC SDK includes a version of the uuidgen ! 637: utility for Microsoft Windows NT. If the endpoint mapper has not been ! 638: started, you must start the endpoint mapper before you start the uuidgen ! 639: utility. To run uuidgen, enter: ! 640: ! 641: rpcss noservice ! 642: uuidgen ! 643: ! 644: After the endpoint mapper has been started once, you can start the ! 645: uuidgen utility by entering "uuidgen." The "rpcss noservice" step is not ! 646: required for the MS-DOS version of uuidgen. ! 647: ! 648: 16.0 Use NULL security descriptor with RpcUseAllProtseqs ! 649: ! 650: The RpcUseAllProtseqs security descriptor parameter must be set to NULL ! 651: in this beta release of Microsoft RPC version 1.0. The NULL parameter ! 652: indicates that the default ACL is applied. ! 653: ! 654: In this beta release, you should not use the "system" account with the ! 655: named pipe transport because this account has a default ACL. ! 656: ! 657: 17.0 Leading zeroes in version numbers do not create unique values ! 658: ! 659: The period between the major and minor numbers is a delimiter and does ! 660: not represent a decimal point. For example, the version setting 1.11 ! 661: represents a major value of one and a minor value of eleven. Version ! 662: 1.11 does not represent a value between 1.1 and 1.2. Version 1.11 ! 663: represents a value between 1.10 and 1.12. Do not use leading zeroes in ! 664: the minor version value. ! 665: ! 666: 18.0 Const initialization ! 667: ! 668: The MIDL compiler accepts void pointer initialization in some cases when ! 669: it should report an error, as in the following: ! 670: ! 671: void * v = 1; ! 672: ! 673: Although accepted by this release of the MIDL compiler, this ! 674: initialization is not valid. ! 675: ! 676: 19.0 Include three header files in your distributed applications ! 677: ! 678: With this version of the Microsoft RPC SDK, your distributed application ! 679: should include the following header files, in the following sequence: ! 680: ! 681: #include <RPC.H> ! 682: #include <RPCNDR.H> ! 683: #include "mystub.h" ! 684: ! 685: where mystub.h is the stub file generated by the MIDL compiler. ! 686: ! 687: 20.0 Context handle issues ! 688: ! 689: An [in, out] context handle can be NULL on input only if another, ! 690: explicit, handle is used as the binding handle. ! 691: ! 692: Context handles cannot be used as function return values, as in the ! 693: following example: ! 694: ! 695: [context_handle] long * MyFunc(...); ! 696: ! 697: 21.0 Only one error_status_t parameter allowed ! 698: ! 699: The Microsoft RPC implementation of the type error_status_t is ! 700: equivalent to the DCE error_status_t associated with the attributes ! 701: [fault_status, comm_status]. ! 702: ! 703: Unlike the DCE specification, which allows multiple parameters of type ! 704: error_status_t, the MIDL compiler supports only one parameter of type ! 705: error_status_t in each remote procedure. ! 706: ! 707: 22.0 Unsized arrays issues ! 708: ! 709: In this release of Microsoft RPC version 1.0, IDL files that feature ! 710: unsized arrays with the size_is attributes can cause the MIDL compiler ! 711: to generate C language stubs that contain errors. As a workaround for ! 712: this software error, specify a maximum array size and use the length_is ! 713: attribute. ! 714: ! 715: 23.0 Separate in, out parameters to avoid memory orphaning ! 716: ! 717: When your distributed application uses an [in, out, unique] pointer ! 718: parameter, the server side of the application can change the value of ! 719: the pointer parameter to NULL. When the server returns the NULL value to ! 720: the client, memory referenced by the pointer before the remote procedure ! 721: call is still present on the client side but is no longer accessible ! 722: from that pointer. This memory is said to be "orphaned." ! 723: ! 724: Memory can also be orphaned even when the server returns a non-null ! 725: value for the pointer parameter. For example, if the parameter points to ! 726: a complex data structure such as a tree, the server side of the ! 727: application can delete nodes of the tree without modifying the value of ! 728: the pointer to the root node of the tree. ! 729: ! 730: Repeated orphaning of memory on the client without freeing the unused ! 731: memory can lead to a situation where the client runs out of available ! 732: memory resources. You can prevent such a client "memory leak" by ! 733: maintaining pointers to the allocated memory. One method that maintains ! 734: pointers to allocated memory on the client is to use separate [in] and ! 735: [out, unique] parameters rather than a single [in, out, unique] ! 736: parameter. ! 737: ! 738: By using separate [in] and [out] parameters, you can force the ! 739: distributed application to allocate memory on both the client and server ! 740: each time the client application calls the remote procedure. The server ! 741: stub allocates memory for [in] data when the client calls the remote ! 742: procedure. The client stub allocates memory for [out] data during return ! 743: from the remote procedure. ! 744: ! 745: This technique, like double-buffering, can use twice as much memory as ! 746: needed for each data structure. To reduce memory use, your client ! 747: application can free the memory associated with the [in] parameter after ! 748: making the remote procedure call. ! 749: ! 750: 24.0 Small model application development not supported ! 751: ! 752: This beta release of Microsoft RPC version 1.0 for MS-DOS and Microsoft ! 753: Windows 3.x supports development of large model applications only. The ! 754: link libraries and dynamic link libraries supplied with this release are ! 755: large-model libraries. ! 756: ! 757: In this beta release, you cannot create small-model applications that ! 758: use RPC. ! 759: ! 760: 25.0 Single process cannot be client, server using NetBIOS ! 761: ! 762: This beta release of Microsoft RPC version 1.0 does not support ! 763: applications that use the NetBIOS transport and that are designed as a ! 764: single process that makes calls to both the client and server run-time ! 765: libraries. ! 766: ! 767: 26.0 Escape sequences not correct in the generated header files ! 768: ! 769: The MIDL compiler provided with this beta release of Microsoft RPC ! 770: version 1.0 does not correctly produce escape sequences in generated C ! 771: language header files. ! 772: ! 773: Character constants that use hexadecimal notation in the IDL file ! 774: incorrectly appear as null characters in the generated header file. For ! 775: example, the IDL file statement: ! 776: ! 777: const char HexNotationChar = '\x10'; ! 778: ! 779: generates the incorrect definition in the generated .H file: ! 780: ! 781: #define HexNotationChar '\0' ! 782: ! 783: Strings that contain the escaped double-quote character appear in the ! 784: generated header file without the escape character. For example, the ! 785: string "an escaped double quote\"" is incorrectly generated as the ! 786: string "an escaped double quote"". ! 787: ! 788: As a workaround, define escape sequences in a common header file that ! 789: can be directly included by your application. ! 790: ! 791: 27.0 Ncalrpc transport issues ! 792: ! 793: In this beta release of Microsoft RPC version 1.0, client applications ! 794: that use the protocol ncalrpc with implicit handles must include code to ! 795: handle exceptions before the client can connect to the server. The ! 796: number of exceptions raised during binding is related to the number of ! 797: times a client has connected to the server. Exception 0x6E6 is raised. ! 798: After handling this exception as many times as it is raised, the client ! 799: can connect to the server. ! 800: ! 801: The ncalrpc transport supplied in this beta release does not support ! 802: callbacks and does not support buffers larger than 32K. ! 803: ! 804: 28.0 RpcNsBindingExport requires a non-null interface parameter ! 805: ! 806: In this release of Microsoft RPC version 1.0, the RPC API function ! 807: RpcNsBindingExport requires a non-zero value for the parameter IfSpec. ! 808: When you supply a NULL value for IfSpec, the function incorrectly ! 809: returns the value RPC_S_NAME_SERVICE_UNAVAILABLE. ! 810: ! 811: 29.0 Configuring RPC name service for LAN Manager networks ! 812: ! 813: To run the locator service on LAN Manager networks, you must run a ! 814: primary locator on a domain controller and you must run a locator on ! 815: each computer that runs an RPC server. ! 816: ! 817: When the primary locator runs on the primary domain controller (PDC), no ! 818: configuration is needed. The default registry settings assume that the ! 819: primary locator runs on the PDC. ! 820: ! 821: When the primary locator runs on a computer other than the primary ! 822: domain controller, change the registry entry ! 823: SOFTWARE\Microsoft\Rpc\NameService\NetworkAddress to the names of the ! 824: computers that run the locator service. Separate computer names with the ! 825: semicolon character ";". ! 826: ! 827: The NameService registry entry NetworkAddress is used by clients during ! 828: name service lookup operations. The NameService registry entry ! 829: ServerNetworkAddress is used by servers during name service export ! 830: operations. ! 831: ! 832: For Microsoft Windows NT, use the regedit utility to change the registry ! 833: entry. For MS-DOS and Microsoft Windows 3.1, use a text editor to change ! 834: the entry name \Root\Software\Microsoft\Rpc\NameService\NetworkAddress ! 835: in the file RPCREG.DAT. ! 836: ! 837: For information about using the RPC name service with DCE host ! 838: computers, see the instructions provided in release note 2.0, "Gateway ! 839: required for DCE NSI API interoperability." ! 840: ! 841: 30.0 Length_is applied to pointer causes error ! 842: ! 843: The MIDL compiler supplied with this beta release of Microsoft RPC ! 844: version 1.0 generates incorrect stub code for an IDL file that applies ! 845: the length_is attribute to a pointer that represents an unsigned array. ! 846: For example, in the following example, the data size is specified as 1 ! 847: rather than the value represented by the variable s: ! 848: ! 849: void foo( [length_is(s)] long * pl, short s); ! 850: ! 851: ----------------------------------------------------------- ! 852: PostScript is a registered trademark of Adobe Systems, Inc. ! 853:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.