407 lines
14 KiB
C
407 lines
14 KiB
C
/************************************************************************
|
|
* 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 */
|
|
|
|
|