text: /************************************************************************
  * Copyright (c) Wonderware Software Development Corp. 1991-1993.        *
  *               All Rights Reserved.                                    *
  * Copyright (c) Microsoft Inc. 1995-1999                                *
  *               All Rights Reserved.                                    *
  ************************************************************************/
  
  #ifndef          _INC_NDDEAPI
  #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  #define          _INC_NDDEAPI
  
  #if _MSC_VER > 1000
  #pragma once
  #endif
  
  #include <pshpack1.h>   /* Assume byte packing throughout */
  
  #ifdef __cplusplus
  extern "C" {            /* Assume C declarations for C++ */
  #endif    /* __cplusplus */
  
  #ifndef CNLEN           /* If not included with netapi header */
  #define CNLEN           15                  /* Computer name length     */
  #define UNCLEN          (CNLEN+2)           /* UNC computer name length */
  #endif /* CNLEN */
  
  // the choice of this char affects legal share,topic, etc. names
  #define SEP_CHAR    ','
  #define BAR_CHAR    "|"
  #define SEP_WCHAR   L','
  #define BAR_WCHAR   L"|"
  
  /* API error codes  */
  #define NDDE_NO_ERROR                   0
  #define NDDE_ACCESS_DENIED              1
  #define NDDE_BUF_TOO_SMALL              2
  #define NDDE_ERROR_MORE_DATA            3
  #define NDDE_INVALID_SERVER             4
  #define NDDE_INVALID_SHARE              5
  #define NDDE_INVALID_PARAMETER          6
  #define NDDE_INVALID_LEVEL              7
  #define NDDE_INVALID_PASSWORD           8
  #define NDDE_INVALID_ITEMNAME           9
  #define NDDE_INVALID_TOPIC             10
  #define NDDE_INTERNAL_ERROR            11
  #define NDDE_OUT_OF_MEMORY             12
  #define NDDE_INVALID_APPNAME           13
  #define NDDE_NOT_IMPLEMENTED           14
  #define NDDE_SHARE_ALREADY_EXIST       15
  #define NDDE_SHARE_NOT_EXIST           16
  #define NDDE_INVALID_FILENAME          17
  #define NDDE_NOT_RUNNING               18
  #define NDDE_INVALID_WINDOW            19
  #define NDDE_INVALID_SESSION           20
  #define NDDE_INVALID_ITEM_LIST         21
  #define NDDE_SHARE_DATA_CORRUPTED      22
  #define NDDE_REGISTRY_ERROR            23
  #define NDDE_CANT_ACCESS_SERVER        24
  #define NDDE_INVALID_SPECIAL_COMMAND   25
  #define NDDE_INVALID_SECURITY_DESC     26
  #define NDDE_TRUST_SHARE_FAIL          27
  
  /* string size constants */
  #define MAX_NDDESHARENAME       256
  #define MAX_DOMAINNAME          15
  #define MAX_USERNAME            15
  #define MAX_APPNAME             255
  #define MAX_TOPICNAME           255
  #define MAX_ITEMNAME            255
  
  /* connectFlags bits for ndde service affix */
  #define NDDEF_NOPASSWORDPROMPT  0x0001
  #define NDDEF_NOCACHELOOKUP     0x0002
  #define NDDEF_STRIP_NDDE        0x0004
  
  
  /* NDDESHAREINFO - contains information about a NDDE share */
  
  struct NDdeShareInfo_tag {
      LONG                    lRevision;
      LPTSTR                  lpszShareName;
      LONG                    lShareType;
      LPTSTR                  lpszAppTopicList;
      LONG                    fSharedFlag;
      LONG                    fService;
      LONG                    fStartAppFlag;
      LONG                    nCmdShow;
      LONG                    qModifyId[2];
      LONG                    cNumItems;
      LPTSTR                  lpszItemList;
  };
  typedef struct NDdeShareInfo_tag   NDDESHAREINFO;
  typedef struct NDdeShareInfo_tag * PNDDESHAREINFO;
  
  /*  Share Types */
  #define SHARE_TYPE_OLD      0x01                // Excel|sheet1.xls
  #define SHARE_TYPE_NEW      0x02                // ExcelWorksheet|sheet1.xls
  #define SHARE_TYPE_STATIC   0x04                // ClipSrv|SalesData
  
  /*
      Add new share
  */
  UINT WINAPI
  NDdeShareAddA (
      LPSTR                   lpszServer, // server to execute on ( must be NULL )
      UINT                    nLevel,     // info level must be 2
      PSECURITY_DESCRIPTOR    pSD,        // initial security descriptor (optional)
      LPBYTE                  lpBuffer,   // contains (NDDESHAREINFO) + data
      DWORD                   cBufSize    // sizeof supplied buffer
  );
  
  UINT WINAPI
  NDdeShareAddW (
      LPWSTR                  lpszServer, // server to execute on ( must be NULL )
      UINT                    nLevel,     // info level must be 2
      PSECURITY_DESCRIPTOR    pSD,        // initial security descriptor (optional)
      LPBYTE                  lpBuffer,   // contains (NDDESHAREINFO) + data
      DWORD                   cBufSize    // sizeof supplied buffer
  );
  
  /*
      Delete a share
  */
  UINT WINAPI
  NDdeShareDelA (
      LPSTR   lpszServer,     // server to execute on ( must be NULL )
      LPSTR   lpszShareName,  // name of share to delete
      UINT    wReserved       // reserved for force level (?) 0 for now
  );
  
  UINT WINAPI
  NDdeShareDelW (
      LPWSTR  lpszServer,     // server to execute on ( must be NULL )
      LPWSTR  lpszShareName,  // name of share to delete
      UINT    wReserved       // reserved for force level (?) 0 for now
  );
  
  /*
      Get Share Security Descriptor
  */
  
  UINT WINAPI
  NDdeGetShareSecurityA(
      LPSTR                   lpszServer,     // server to execute on ( must be NULL )
      LPSTR                   lpszShareName,  // name of share to delete
      SECURITY_INFORMATION    si,             // requested information
      PSECURITY_DESCRIPTOR    pSD,            // address of security descriptor
      DWORD                   cbSD,           // size of buffer for security descriptor
      LPDWORD                 lpcbsdRequired  // address of required size of buffer
  );
  
  UINT WINAPI
  NDdeGetShareSecurityW(
      LPWSTR                  lpszServer,     // server to execute on ( must be NULL )
      LPWSTR                  lpszShareName,  // name of share to delete
      SECURITY_INFORMATION    si,             // requested information
      PSECURITY_DESCRIPTOR    pSD,            // address of security descriptor
      DWORD                   cbSD,           // size of buffer for security descriptor
      LPDWORD                 lpcbsdRequired  // address of required size of buffer
  );
  
  /*
      Set Share Security Descriptor
  */
  
  UINT WINAPI
  NDdeSetShareSecurityA(
      LPSTR                   lpszServer,     // server to execute on ( must be NULL )
      LPSTR                   lpszShareName,  // name of share to delete
      SECURITY_INFORMATION    si,             // type of information to set
      PSECURITY_DESCRIPTOR    pSD             // address of security descriptor
  );
  
  UINT WINAPI
  NDdeSetShareSecurityW(
      LPWSTR                  lpszServer,     // server to execute on ( must be NULL )
      LPWSTR                  lpszShareName,  // name of share to delete
      SECURITY_INFORMATION    si,             // type of information to set
      PSECURITY_DESCRIPTOR    pSD             // address of security descriptor
  );
  
  /*
      Enumerate shares
  */
  UINT WINAPI
  NDdeShareEnumA (
      LPSTR   lpszServer,         // server to execute on ( NULL for local )
      UINT    nLevel,             //  0 for null separated 00 terminated list
      LPBYTE  lpBuffer,           // pointer to buffer
      DWORD   cBufSize,           // size of buffer
      LPDWORD lpnEntriesRead,     // number of names returned
      LPDWORD lpcbTotalAvailable  // number of bytes available
  );
  
  UINT WINAPI
  NDdeShareEnumW (
      LPWSTR  lpszServer,         // server to execute on ( NULL for local )
      UINT    nLevel,             //  0 for null separated 00 terminated list
      LPBYTE  lpBuffer,           // pointer to buffer
      DWORD   cBufSize,           // size of buffer
      LPDWORD lpnEntriesRead,     // number of names returned
      LPDWORD lpcbTotalAvailable  // number of bytes available
  );
  
  /*
      Get information on a share
  */
  UINT WINAPI
  NDdeShareGetInfoA (
      LPSTR   lpszServer,         // server to execute on ( must be NULL )
      LPSTR   lpszShareName,      // name of share
      UINT    nLevel,             // info level must be 2
      LPBYTE  lpBuffer,           // gets struct containing (NDDESHAREINFO) + data
      DWORD   cBufSize,           // sizeof buffer
      LPDWORD lpnTotalAvailable,  // number of bytes available
      LPWORD  lpnItems            // item mask for partial getinfo (must be 0)
  );
  
  UINT WINAPI
  NDdeShareGetInfoW (
      LPWSTR  lpszServer,         // server to execute on ( must be NULL )
      LPWSTR  lpszShareName,      // name of share
      UINT    nLevel,             // info level must be 2
      LPBYTE  lpBuffer,           // gets struct containing (NDDESHAREINFO) + data
      DWORD   cBufSize,           // sizeof buffer
      LPDWORD lpnTotalAvailable,  // number of bytes available
      LPWORD  lpnItems            // item mask for partial getinfo (must be 0)
  );
  
  /*
      Modify DDE share data
  */
  UINT WINAPI
  NDdeShareSetInfoA (
      LPSTR   lpszServer,         // server to execute on ( must be NULL )
      LPSTR   lpszShareName,      // name of share
      UINT    nLevel,             // info level must be 2
      LPBYTE  lpBuffer,           // points to struct with (NDDESHAREINFO) + data
      DWORD   cBufSize,           // sizeof buffer
      WORD    sParmNum            // Parameter index ( must be 0 - entire )
  );
  
  UINT WINAPI
  NDdeShareSetInfoW (
      LPWSTR  lpszServer,         // server to execute on ( must be NULL )
      LPWSTR  lpszShareName,      // name of share
      UINT    nLevel,             // info level must be 2
      LPBYTE  lpBuffer,           // points to struct with (NDDESHAREINFO) + data
      DWORD   cBufSize,           // sizeof buffer
      WORD    sParmNum            // Parameter index ( must be 0 - entire )
  );
  
  /*
      Set/Create a trusted share
  */
  
  UINT WINAPI
  NDdeSetTrustedShareA (
      LPSTR   lpszServer,         // server to execute on ( must be NULL )
      LPSTR   lpszShareName,      // name of share to delete
      DWORD   dwTrustOptions      // trust options to apply
  );
  
  UINT WINAPI
  NDdeSetTrustedShareW (
      LPWSTR  lpszServer,         // server to execute on ( must be NULL )
      LPWSTR  lpszShareName,      // name of share to delete
      DWORD   dwTrustOptions      // trust options to apply
  );
  
                                              /*  Trusted share options       */
  #define NDDE_TRUST_SHARE_START  0x80000000L     // Start App Allowed
  #define NDDE_TRUST_SHARE_INIT   0x40000000L     // Init Conv Allowed
  #define NDDE_TRUST_SHARE_DEL    0x20000000L     // Delete Trusted Share (on set)
  #define NDDE_TRUST_CMD_SHOW     0x10000000L     // Use supplied cmd show
  #define NDDE_CMD_SHOW_MASK      0x0000FFFFL     // Command Show mask
  
  /*
      Get a trusted share options
  */
  
  UINT WINAPI
  NDdeGetTrustedShareA (
      LPSTR       lpszServer,         // server to execute on ( must be NULL )
      LPSTR       lpszShareName,      // name of share to query
      LPDWORD     lpdwTrustOptions,   // trust options in effect
      LPDWORD     lpdwShareModId0,    // first word of share mod id
      LPDWORD     lpdwShareModId1     // second word of share mod id
  );
  
  UINT WINAPI
  NDdeGetTrustedShareW (
      LPWSTR      lpszServer,         // server to execute on ( must be NULL )
      LPWSTR      lpszShareName,      // name of share to query
      LPDWORD     lpdwTrustOptions,   // trust options in effect
      LPDWORD     lpdwShareModId0,    // first word of share mod id
      LPDWORD     lpdwShareModId1     // second word of share mod id
  );
  
  
  /*
      Enumerate trusted shares
  */
  UINT WINAPI
  NDdeTrustedShareEnumA (
      LPSTR   lpszServer,         // server to execute on ( NULL for local )
      UINT    nLevel,             //  0 for null separated 00 terminated list
      LPBYTE  lpBuffer,           // pointer to buffer
      DWORD   cBufSize,           // size of buffer
      LPDWORD lpnEntriesRead,     // number of names returned
      LPDWORD lpcbTotalAvailable  // number of bytes available
  );
  
  UINT WINAPI
  NDdeTrustedShareEnumW (
      LPWSTR  lpszServer,         // server to execute on ( NULL for local )
      UINT    nLevel,             //  0 for null separated 00 terminated list
      LPBYTE  lpBuffer,           // pointer to buffer
      DWORD   cBufSize,           // size of buffer
      LPDWORD lpnEntriesRead,     // number of names returned
      LPDWORD lpcbTotalAvailable  // number of bytes available
  );
  
  /*
      Convert error code to string value
  */
  UINT WINAPI
  NDdeGetErrorStringA (
      UINT    uErrorCode,         // Error code to get string for
      LPSTR   lpszErrorString,    // buffer to hold error string
      DWORD   cBufSize            // sizeof buffer
  );
  
  UINT WINAPI
  NDdeGetErrorStringW (
      UINT    uErrorCode,         // Error code to get string for
      LPWSTR  lpszErrorString,    // buffer to hold error string
      DWORD   cBufSize            // sizeof buffer
  );
  
  /*
      Validate share name format
  */
  BOOL WINAPI
  NDdeIsValidShareNameA (
      LPSTR shareName
  );
  
  BOOL WINAPI
  NDdeIsValidShareNameW (
      LPWSTR shareName
  );
  
  /*
      Validate application/topic list format
  */
  BOOL WINAPI
  NDdeIsValidAppTopicListA (
      LPSTR targetTopic
  );
  
  BOOL WINAPI
  NDdeIsValidAppTopicListW (
      LPWSTR targetTopic
  );
  
  #ifdef UNICODE
  #define NDdeShareAdd            NDdeShareAddW
  #define NDdeShareDel            NDdeShareDelW
  #define NDdeSetShareSecurity    NDdeSetShareSecurityW
  #define NDdeGetShareSecurity    NDdeGetShareSecurityW
  #define NDdeShareEnum           NDdeShareEnumW
  #define NDdeShareGetInfo        NDdeShareGetInfoW
  #define NDdeShareSetInfo        NDdeShareSetInfoW
  #define NDdeGetErrorString      NDdeGetErrorStringW
  #define NDdeIsValidShareName    NDdeIsValidShareNameW
  #define NDdeIsValidAppTopicList NDdeIsValidAppTopicListW
  #define NDdeSetTrustedShare     NDdeSetTrustedShareW
  #define NDdeGetTrustedShare     NDdeGetTrustedShareW
  #define NDdeTrustedShareEnum    NDdeTrustedShareEnumW
  #else
  #define NDdeShareAdd            NDdeShareAddA
  #define NDdeShareDel            NDdeShareDelA
  #define NDdeSetShareSecurity    NDdeSetShareSecurityA
  #define NDdeGetShareSecurity    NDdeGetShareSecurityA
  #define NDdeShareEnum           NDdeShareEnumA
  #define NDdeShareGetInfo        NDdeShareGetInfoA
  #define NDdeShareSetInfo        NDdeShareSetInfoA
  #define NDdeGetErrorString      NDdeGetErrorStringA
  #define NDdeIsValidShareName    NDdeIsValidShareNameA
  #define NDdeIsValidAppTopicList NDdeIsValidAppTopicListA
  #define NDdeSetTrustedShare     NDdeSetTrustedShareA
  #define NDdeGetTrustedShare     NDdeGetTrustedShareA
  #define NDdeTrustedShareEnum    NDdeTrustedShareEnumA
  #endif
  
  #ifdef __cplusplus
  }
  #endif    /* __cplusplus */
  
  #include <poppack.h>
  
  #pragma option pop /*P_O_Pop*/
  #endif  /* _INC_NDDEAPI */
  
  
  