/*****************************************************************/ /** Microsoft Windows 4.00 **/ /** Copyright (C) Microsoft Corp., 1994-1995 **/ /*****************************************************************/ /* * Internal NetWare access API definitions for use by Windows components * * History * * vlads 12/15/94 Created * vlads 12/28/94 Added connection management and authentication prototypes * * * */ #ifndef _INC_MSNWAPI #define _INC_MSNWAPI #include #include // // We default to byte-packing // #include #ifdef __cplusplus extern "C" { /* Assume C declarations for C++ */ #endif /* __cplusplus */ #ifndef IS_32 #define API_PREFNAME(name) WINAPI Thk##name #else #ifdef DEFINE_INTERNAL_PREFIXES #define API_PREFNAME(name) I_##name #else #define API_PREFNAME(name) WINAPI name #endif #endif /* * Manifest constants * */ #define MAX_NDS_NAME_CHARS 256 // object names #define MAX_NDS_NAME_BYTES (2*(MAX_NDS_NAME_CHARS+1)) #define MAX_NDS_RDN_CHARS 128 // relative name component #define MAX_NDS_RDN_BYTES (2*(MAX_RDN_CHARS + 1)) #define MAX_NDS_TREE_CHARS 32 // tree name #define MAX_NDS_SCHEMA_NAME_CHARS 32 // class, property names #define MAX_NDS_SCHEMA_NAME_BYTES (2*(MAX_NDS_SCHEMA_NAME_CHARS+1)) /* * Miscellaneous APIs * */ NW_STATUS NetWGetRequesterVersion(OUT LPBYTE majorVersion, OUT LPBYTE minorVersion, OUT LPBYTE revision); /* * Global directory services context management * */ NW_STATUS NDSSetNameContext(IN LPSTR NameContext, BOOL fGlobal); NW_STATUS NDSGetNameContext(OUT LPSTR NameContext, BOOL fGlobal); /* * Connection management * --------------------- * * NetWGetPreferredName Get/Set preferred connection name, according to type * NetWSetPreferredName parameter. * * NetWGetPreferredConnID Establishes default connection to network resource and * returns created connection handle * * NetWAttachByName Attach to resource by given name. For the tree this is equivalent * to combination ofr SetPreferredName\GetPreferredConnID, but atomic * * NetWAttachByAddress Attaches to server by given address. * */ typedef enum _NETWARE_CONNECTION_TYPE { NETW_AnyType = 0, NETW_BinderyServer, NETW_DirectoryServer } NETWARE_CONNECTION_TYPE, *PNETWARE_CONNECTION_TYPE; typedef struct _NETWARE_CONNECTION_INFO { NETWARE_CONNECTION_TYPE ConnType; WORD ConnFlags; // see below WORD ServerConnNum; BYTE MajVer; BYTE MinVer; BYTE ServerAddress[12]; // IPX address of server } NETWARE_CONNECTION_INFO, *PNETWARE_CONNECTION_INFO; // ConnFlags values #define CONN_AUTH_BIT 0 #define CONN_AUTH_FLAG (1 << CONN_AUTH_BIT ) #define CONN_LOCKED_BIT 1 #define CONN_LOCKED_FLAG (1 << CONN_LOCKED_BIT) #define CONN_NDS_NAME_BIT 2 #define CONN_NDS_NAME_FLAG (1 << CONN_NDS_NAME_BIT) // TBD typedef struct _NETWARE_CONNECTION_REMOTE_INFO { DWORD dwF; } NETWARE_CONNECTION_REMOTE_INFO, *PNETWARE_CONNECTION_REMOTE_INFO; UINT NetWGetNumConnEntries( VOID ); NW_STATUS NetWGetPreferredName( IN NETWARE_CONNECTION_TYPE ConnectionType, OUT LPSTR pszBuf ); NW_STATUS NetWSetPreferredName( IN NETWARE_CONNECTION_TYPE ConnectionType, IN LPSTR pszBuf ); NW_STATUS NetWGetPreferredConnID( IN NETWARE_CONNECTION_TYPE ConnectionType, OUT NWCONN_HANDLE *phConn ); NW_STATUS NetWGetPrimaryConnection( OUT NWCONN_HANDLE *phConn ); NW_STATUS WINAPI NetWSetPrimaryConnection( IN NWCONN_HANDLE hConn ); NW_STATUS NetWAttachByName( IN UINT ConnFlags, // if CONN_NDS_NAME_FLAG, try NDS IN LPSTR pszResourceName, OUT PNWCONN_HANDLE phConn ); NW_STATUS NetWAttachByAddress( IN PBYTE pbAddress, OUT PNWCONN_HANDLE phConn ); NW_STATUS NetWLookupConnection( IN NETWARE_CONNECTION_TYPE ConnectionType, IN OUT NWCONN_HANDLE *phConn ); NW_STATUS NetWGetConnectionLocalStatus( IN NWCONN_HANDLE hConn, OUT PNETWARE_CONNECTION_INFO pConnInfo, OUT LPSTR pszResourceName ); NW_STATUS NetWGetConnectionRemoteInformation( IN NWCONN_HANDLE hConn, OUT PNETWARE_CONNECTION_REMOTE_INFO pConnInfo, OUT LPSTR pszResourceName ); NWCONN_HANDLE NWREDIRToVLMHandle(BYTE connId); BYTE VLMToNWREDIRHandle(NWCONN_HANDLE hConn); // returns 12 byte local net address NW_STATUS NetWGetLocalAddress( BYTE *buffer // 12 bytes ); // // For tree - cleans up all NDS connections , for server - just this one // NW_STATUS NetWDetachResource( IN NETWARE_CONNECTION_TYPE ConnectionType, IN NWCONN_HANDLE hConn ); NW_STATUS NetWLicenseConnection( IN NWCONN_HANDLE hConn ); NW_STATUS NetWUnLicenseConnection( IN NWCONN_HANDLE hConn ); /* * Authetication APIs * ------------------ * * */ NW_STATUS NDSIsLoggedIn( OUT LPSTR pszUserName ); NW_STATUS NDSLogin( OUT LPSTR pszUserName, OUT LPSTR pszPassword ); NW_STATUS NDSLogout( VOID ); NW_STATUS NDSAuthenticateToServer( IN NWCONN_HANDLE hConn ); NW_STATUS WINAPI NDSChangePassword(LPSTR pszUser, LPSTR pszOldPasswd, LPSTR pszNewPasswd); // Bindery keyed change password NW_STATUS WINAPI NWChangeBinderyObjectPassword( NWCONN_HANDLE hConn, LPCSTR pObjectName, USHORT ObjectType, // 0x100 for User LPCSTR pOldPassword, // upper-cased LPCSTR pNewPassword // upper-cased ); NW_STATUS WINAPI NWChangeBinderyConnectionPassword( LPCSTR pszResourceName, LPCSTR pszLoggedInUser, LPCSTR pszOldPassword, LPCSTR pszNewPassword ); NW_STATUS NDSCanonicalizeName( IN UINT flags, // see below IN LPSTR pszName, OUT LPSTR pszCanonicalName ); #define FLAGS_TYPED_NAMES 1 // add/remove name component types (e.g. CN=) #define FLAGS_NO_CONTEXT 2 // dont append/remove context #define FLAGS_LOCAL_CONTEXT 4 // use local name context (not global) NW_STATUS NDSAbbreviateName( IN UINT flags, IN LPSTR pszCanonicalName, OUT LPSTR pszAbbreviatedName ); /* * Netware Directory Syntax IDs */ #define NDSI_DIST_NAME 1 // Distinguished Name #define NDSI_CS_STRING 2 // Case sensitive string #define NDSI_CI_STRING 3 // Case ignore string #define NDSI_PRINT_STRING 4 // Printable string (subset of ASCII) #define NDSI_NUM_STRING 5 // numeric string ('0' - '9' and space) #define NDSI_CI_STRINGLIST 6 // list of case ignore strings #define NDSI_BOOLEAN 7 // 0 or 1 #define NDSI_INTEGER 8 // signed 32 bit int #define NDSI_BYTE_STRING 9 // raw octet string #define NDSI_PHONE_NUMBER 10 #define NDSI_FAX_NUMBER 11 #define NDSI_NET_ADDRESS 12 // typed network address #define NDSI_BYTE_STRINGLIST 13 // list of octet strings #define NDSI_EMAIL_ADDRESS 14 #define NDSI_FILE_PATH 15 #define NDSI_ACL_ENTRY 17 // NDS access control list #define NDSI_POST_ADDRESS 18 // upto 5 lines #define NDSI_TIME_STAMP 19 #define NDSI_CLASS_NAME 20 // Object Class #define NDSI_STREAM 21 // read using file i/o #define NDSI_COUNTER 22 // similar to INTEGER #define NDSI_TIME 24 // time in secs since 0hrs 1/1/80 /* * Directory syntax types */ typedef DWORD OBJ_ID; // Use PSTR for :NDSI_DIST_NAME, NDSI_CS_STRING, NDSI_CI_STRING, NDSI_PRINT_STRING, NDSI_NUM_STRING typedef unsigned char DS_BOOLEAN; //NDSI_BOOLEAN typedef long DS_INT; //NDSI_INTEGER, NDSI_COUNTER (32 bit signed int) typedef unsigned long DS_TIME; //NDSI_TIME (32 bit unsigned) // NDSI_NET_ADDRESS typedef struct { UINT addrType; // see below UINT addrLen; BYTE *addr; // addrLength bytes of data } DS_NET_ADDRESS; // values for addrType #define NETADDR_IPX 0 #define NETADDR_IP 1 #define NETADDR_SDLC 2 #define NETADDR_ETHERNET_TOKENRING 3 #define NETADDR_OSI 4 // NDSI_EMAIL_ADDRESS typedef struct { UINT addrType; LPSTR addr; // e-mail address } DS_EMAIL_ADDRESS; // NDSI_CI_STRINGLIST typedef struct { struct _dsStringList *next; LPSTR string; } DS_CI_STRINGLIST; //NDSI_BYTE_STRING typedef struct { UINT strLen; BYTE *data; // strLen bytes } DS_BYTE_STRING; // NDSI_FILE_PATH typedef struct { UINT nameSpace; LPSTR volume; LPSTR path; } DS_FILE_PATH; //NDSI_FAX_NUMBER typedef struct { LPSTR number; UINT bitCount; UINT parameters; } DS_FAX_NUMBER; // values for nameSpace: // #define NAMESPACE_DOS 0 #define NAMESPACE_MAC 1 #define NAMESPACE_UNIX 2 #define NAMESPACE_FTAM 3 #define NAMESPACE_OS2 4 typedef struct { CHAR objectName[MAX_NDS_NAME_CHARS+1]; // canonical name of object OBJ_ID entryId; // NDS internal object Id ULONG flags; // see below UINT subordinateCount; // number of children (if this is a container) char className[MAX_NDS_SCHEMA_NAME_CHARS+1]; // e.g. "User" } DS_OBJ_INFO; // values for DS_OBJ_INFO flags: // // // Object flags // #define DS_CONTAINER 0x4 #define DS_ALIAS 0x1 #define NDSOBJ_ALIAS_FLAG 0x1 #define NDSOBJ_PARTITION_FLAG 0x2 // partition root #define NDSOBJ_CONTAINER_FLAG 0x4 // container object // // NDS Class and attributes names // #define DSCL_TOP "Top" #define DSCL_ALIAS "Alias" #define DSCL_COMPUTER "Computer" #define DSCL_COUNTRY "Country" #define DSCL_DIRECTORY_MAP "Directory Map" #define DSCL_GROUP "Group" #define DSCL_NCP_SERVER "NCP Server" #define DSCL_ORGANIZATION "Organization" #define DSCL_ORGANIZATIONAL_PERSON "Organizational Person" #define DSCL_ORGANIZATIONAL_ROLE "Organizational Role" #define DSCL_ORGANIZATIONAL_UNIT "Organizational Unit" #define DSCL_PRINTER "Printer" #define DSCL_PRINT_SERVER "Print Server" #define DSCL_PROFILE "Profile" #define DSCL_QUEUE "Queue" #define DSCL_SERVER "Server" #define DSCL_UNKNOWN "Unknown" #define DSCL_USER "User" #define DSCL_VOLUME "Volume" #define DSAT_ALIASED_OBJECT_NAME "Aliased Object Name" #define DSAT_BINDERY_PROPERTY "Bindery Property" #define DSAT_BINDERY_OBJECT_RESTRICTION "Bindery Object Restriction" #define DSAT_BINDERY_TYPE "Bindery Type" #define DSAT_COMMON_NAME "CN" #define DSAT_COUNTRY_NAME "C" #define DSAT_DEFAULT_QUEUE "Default Queue" #define DSAT_DESCRIPTION "Description" #define DSAT_HOME_DIRECTORY "Home Directory" #define DSAT_HOST_DEVICE "Host Device" #define DSAT_HOST_RESOURCE_NAME "Host Resource Name" #define DSAT_HOST_SERVER "Host Server" #define DSAT_LOGIN_ALLOWED_TIME_MAP "Login Allowed Time Map" #define DSAT_LOGIN_DISABLED "Login Disabled" #define DSAT_LOGIN_EXPIRATION_TIME "Login Expiration Time" #define DSAT_LOGIN_GRACE_LIMIT "Login Grace Limit" #define DSAT_LOGIN_GRACE_REMAINING "Login Grace Remaining" #define DSAT_LOGIN_INTRUDER_ADDRESS "Login Intruder Address" #define DSAT_LOGIN_INTRUDER_ATTEMPTS "Login Intruder Attempts" #define DSAT_LOGIN_INTRUDER_LIMIT "Login Intruder Limit" #define DSAT_INTRUDER_ATTEMPT_RESET_INTRVL "Intruder Attempt Reset Interval" #define DSAT_LOGIN_INTRUDER_RESET_TIME "Login Intruder Reset Time" #define DSAT_LOGIN_MAXIMUM_SIMULTANEOUS "Login Maximum Simultaneous" #define DSAT_LOGIN_SCRIPT "Login Script" #define DSAT_LOGIN_TIME "Login Time" #define DSAT_MINIMUM_ACCOUNT_BALANCE "Minimum Account Balance" #define DSAT_MEMBER "Member" #define DSAT_EMAIL_ADDRESS "EMail Address" #define DSAT_NETWORK_ADDRESS "Network Address" #define DSAT_NETWORK_ADDRESS_RESTRICTION "Network Address Restriction" #define DSAT_OBJECT_CLASS "Object Class" #define DSAT_OPERATOR "Operator" #define DSAT_ORGANIZATIONAL_UNIT_NAME "OU" #define DSAT_ORGANIZATION_NAME "O" #define DSAT_OWNER "Owner" #define DSAT_PASSWORDS_USED "Passwords Used" #define DSAT_PASSWORD_ALLOW_CHANGE "Password Allow Change" #define DSAT_PASSWORD_EXPIRATION_INTERVAL "Password Expiration Interval" #define DSAT_PASSWORD_EXPIRATION_TIME "Password Expiration Time" #define DSAT_PASSWORD_MINIMUM_LENGTH "Password Minimum Length" #define DSAT_PASSWORD_REQUIRED "Password Required" #define DSAT_PASSWORD_UNIQUE_REQUIRED "Password Unique Required" #define DSAT_PATH "Path" #define DSAT_PRINT_JOB_CONFIGURATION "Print Job Configuration" #define DSAT_PRINTER_CONTROL "Printer Control" #define DSAT_PROFILE "Profile" #define DSAT_QUEUE "Queue" #define DSAT_QUEUE_DIRECTORY "Queue Directory" #define DSAT_SERVER "Server" #define DSAT_STATE_OR_PROVINCE_NAME "S" #define DSAT_STATUS "Status" #define DSAT_UNKNOWN "Unknown" #define DSAT_USER "User" #define DSAT_VERSION "Version" #define DSAT_GROUP_MEMBERSHIP "Group Membership" #define DSAT_DEVICE "Device" #define DSAT_MESSAGE_SERVER "Message Server" #define DSAT_LANGUAGE "Language" #define DSAT_QUEUE_TYPE "Queue Type" #define DSAT_SUPPORTED_CONNECTIONS "Supported Connections" #define DSAT_UNKNOWN_OBJECT_RESTRICTION "Unknown Object Restriction" #define DSAT_LOCKED_BY_INTRUDER "Locked By Intruder" #define DSAT_PRINTER "Printer" #define DSAT_DETECT_INTRUDER "Detect Intruder" #define DSAT_LOCKOUT_AFTER_DETECTION "Lockout After Detection" #define DSAT_INTRUDER_LOCKOUT_RESET_INTRVL "Intruder Lockout Reset Interval" #define DSAT_SERVER_HOLDS "Server Holds" #define DSAT_SAP_NAME "SAP Name" #define DSAT_VOLUME "Volume" #define DSAT_LAST_LOGIN_TIME "Last Login Time" #define DSAT_PRINT_SERVER "Print Server" #define DSAT_ACCOUNT_BALANCE "Account Balance" #define DSAT_ALLOW_UNLIMITED_CREDIT "Allow Unlimited Credit" #define DSAT_LOCALE "L" #define DSAT_POSTAL_CODE "Postal Code" #define DSAT_POSTAL_OFFICE_BOX "Postal Office Box" #define DSAT_SECURITY_EQUALS "Security Equals" #define DSAT_SURNAME "Surname" #define DSAT_FULL_NAME "Full Name" #define DSAT_TITLE "Title" #define DSAT_TELEPHONE_NUMBER "Telephone Number" #define DSAT_ADMIN_ASSISTANT "Administrative Assistant" #define DSAT_EMPLOYEE_ID "Employee ID" #define DSAT_FAX_NUMBER "Facsimile Telephone Number" #define DSAT_HIGHER_PRIVILEGES "Higher Privileges" #define DSAT_INITIALS "Initials" #define DSAT_LOCKED_BY_INTRUDER "Locked By Intruder" #define DSAT_LOGIN_DISABLED "Login Disabled" #define DSAT_LOGIN_GRACE_LIMIT "Login Grace Limit" #define DSAT_LOGIN_GRACE_REMAINING "Login Grace Remaining" #define DSAT_LOGIN_MAXIMUM_SIMULTANEOUS "Login Maximum Simultaneous" #define DSAT_MAILSTOP "Mailstop" #define DSAT_MINIMUM_ACCOUNT_BALANCE "Minimum Account Balance" #define DSAT_OBJECT_CLASS "Object Class" #define DSAT_OU "OU" #define DSAT_PASSWORDS_USED "Passwords Used" #define DSAT_PHYSICAL_DELIVERY_OFFICE_NAME "Physical Delivery Office Name" #define DSAT_POSTAL_ADDRESS "Postal Address" #define DSAT_PRIVATE_KEY "Private Key" #define DSAT_REVISION "Revision" #define DSAT_SECURITY_FLAGS "Security Flags" #define DSAT_SEE_ALSO "See Also" #define DSAT_SERVER_HOLDS "Server Holds" #define DSAT_SUPERVISOR "Supervisor" #define DSAT_SA "SA" #define DSAT_S "S" #define DSAT_VALIDITY_INTERVAL "Certificate Validity Interval" #define DSAT_EQUIVALENT_TO_ME "Equivalent To Me" #define DSAT_GENERATIONAL_QUALIFIER "Generational Qualifier" #define DSAT_GIVEN_NAME "Given Name" #define DSAT_MAILBOX_ID "Mailbox ID" #define DSAT_MAILBOX_LOCATION "Mailbox Location" #define DSAT_PROFILE_MEMBERSHIP "Profile Membership" #define DSAT_MS_SYS_FLAGS "MS System Flags" #define DSAT_MS_SYSPOLICIES_PATH "MS System Policies" #define DSAT_RIGHTS_QUERYSTRING "[Entry Rights]" #define MSSYS_NDS_ENABLED_POLICIES 0x0001 // // Object rights // #define NDS_BROWSE_OBJ 0x1 #define NDS_CREATE_OBJ 0x2 #define NDS_DELETE_OBJ 0x4 #define NDS_RENAME_OBJ 0x8 #define NDS_SUPERVISE_OBJ 0x10 // // Attribute rights // #define NDS_COMPARE_ATTR 0x1 #define NDS_READ_ATTR 0x2 #define NDS_WRITE_ATTR 0x4 #define NDS_ADD_SELF_ATTR 0x8 #define NDS_MANAGED_ATTR 0x10 #define NDS_SUPERVISE_ATTR 0x20 /* * Directory browsing APIs * ----------------------- * */ NW_STATUS NDSGetObjectInfo( IN LPCSTR lpszObjectName, IN OUT DS_OBJ_INFO *pObjInfo ); NW_STATUS NDSGetObjectInfoWithId( IN NWCONN_HANDLE hConn, // server to query IN DWORD dwObjectId, // objectId IN OUT DS_OBJ_INFO *pObjInfo); NW_STATUS NDSGetObjectId( IN NWCONN_HANDLE hConn, // server to query IN LPCSTR szName, // DS object name OUT DWORD *pObjId); // objectId NW_STATUS NDSListSubordinates( IN LPCSTR ParentName, // canonical name of parent object OUT PVOID ReplyBuf, // user supplied buffer IN UINT ReplyBufLength, // buffer length IN OUT PUINT phIteration, // returned value used for subsequent requests OUT PUINT pNumObjects // number of objects returned ); NW_STATUS NDSListNextObject( IN PVOID ReplyBuf, // filled in by NDSListSubordinates OUT DS_OBJ_INFO *pObjInfo // fields describe the object ); NW_STATUS NDSSearch( IN LPCSTR ParentName, // context of search IN UINT depth, // scope IN LPCSTR srchString, // matching condition IN LPVOID *pArgList, // list of parameters referenced by srchString IN UINT numArgs, OUT PVOID ReplyBuf, // user supplied buffer IN UINT ReplyBufLength, // buffer length IN OUT UINT *pIterationHandle, // returned value used for subsequent requests OUT PUINT pNumObjects // number of objects returned ); NW_STATUS NDSReadAttributes( IN LPCSTR ObjectName, // canonical name of object IN LPCSTR AttribName, // attribute Name e.g. "Surname" IN PVOID ReplyBuf, // user supplied buffer IN UINT ReplyBufLength, // length of buffer IN OUT PUINT phIteration, // returned value used for subsequent requests OUT PUINT pNumValues, // number of values read (on exit) OUT PUINT pSyntaxId // syntax id of value (on exit) ); NW_STATUS NDSReadNextValue( IN PVOID ReplyBuf, // filled in earlier by NDSReadAttributes OUT PVOID pValue, // user allocated buffer, typed according to syntax id IN UINT ValueLength // size of memory pointed to by pValue ); typedef enum { SA_Read = 1, SA_Write, SA_Read_Write } STREAM_ACCESS; NW_STATUS NDSOpenStream( IN LPCSTR ObjectName, IN LPCSTR AttribName, IN STREAM_ACCESS Access, OUT HANDLE *pFileHandle, OUT PUINT pFileLength ); NW_STATUS NDSGetEffectiveRights( IN LPCSTR SubjectName, IN LPCSTR ObjectName, IN LPCSTR AttribName, OUT UINT *pRights ); NW_STATUS NDSModifyAttribute( IN LPCSTR ObjectName, IN LPCSTR AttribName, IN UINT operation, // see below IN UINT syntaxId, // of attribute IN PVOID pValueList, // list of arguments (PSTRs, DS_INTs, DS_BYTE_STRINGs etc.) IN UINT numValues // # of values ); // Modify attribute operations #define ADD_ATTRIB 0 #define REMOVE_ATTRIB 1 #define ADD_ATTRIB_VALUE 2 #define REMOVE_ATTRIB_VALUE 3 #define APPEND_ATTRIB_VALUE 4 #define OVERWRITE_ATTRIB_VALUE 5 #define CLEAR_ATTRIB 6 #define CLEAR_ATTRIB_VALUE 7 NW_STATUS NDSDefineAttribute( IN LPCSTR AttribName, IN UINT syntaxId, IN UINT flags, // see Attribute flags IN LONG lowerLimit, IN LONG upperLimit, IN PVOID asn1Id // NULL for now ); // Attribute flags #define ATTRIB_ENTRY_ID 0x1 #define ATTRIB_SIZED 0x2 #define ATTRIB_PERMANENT 0x4 #define ATTRIB_READ_ONLY 0x8 #define ATTRIB_HIDDEN 0x10 #define ATTRIB_STRING 0x20 #define ATTRIB_SYNC_IMMED 0x40 #define ATTRIB_PUBLIC_READ 0x80 #define ATTRIB_SERVER_ONLY 0x100 #define ATTRIB_WRITE_MANAGED 0x200 #define ATTRIB_PER_REPLICA 0x400 NW_STATUS NDSAddAttributeToClass( IN LPCSTR ClassName, IN LPCSTR AttribName ); // // System NetWare notification codes . Those are used to inform NP about various // NetWare related events ( like completion of login script processing) // typedef UINT NW_SYS_EVENT; typedef DWORD WINAPI F_NPNotifyNetworkEvent(HWND,NW_SYS_EVENT,DWORD); typedef F_NPNotifyNetworkEvent *PF_NPNotifyNetworkEvent; BOOL PrepareNetWareRunTime(HWND hWnd); BOOL FreeNetWareRunTime(VOID); NW_STATUS NWMakeRunTimeInitCalls(VOID); NW_STATUS NWMakeRunTimeTerminateCalls(VOID); #define NW_SE_SCRIPTS_COMPLETED 0x0001 #ifdef __cplusplus } #endif /* __cplusplus */ // // Restore packing setup // #include #endif /* !_INC_MSNWAPI */