351 lines
13 KiB
C
351 lines
13 KiB
C
|
#ifndef __ISDMAPI2_H__
|
||
|
#define __ISDMAPI2_H__
|
||
|
|
||
|
/****************************************************************************
|
||
|
*
|
||
|
* $Archive: /rtp/RRCM32/rrcminc/ISDMAPI2.H $
|
||
|
*
|
||
|
* INTEL Corporation Prorietary Information
|
||
|
*
|
||
|
* This listing is supplied under the terms of a license agreement
|
||
|
* with INTEL Corporation and may not be copied nor disclosed except
|
||
|
* in accordance with the terms of that agreement.
|
||
|
*
|
||
|
* Copyright (c) 1993-1994 Intel Corporation.
|
||
|
*
|
||
|
* $Revision: 1 $
|
||
|
* $Date: 8/13/96 12:16p $
|
||
|
* $Author: Bnkeany $
|
||
|
*
|
||
|
* Deliverable:
|
||
|
*
|
||
|
* Abstract:
|
||
|
*
|
||
|
* Notes:
|
||
|
*
|
||
|
***************************************************************************/
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" { // Assume C declarations for C++.
|
||
|
#endif // __cplusplus
|
||
|
|
||
|
#ifndef DllExport
|
||
|
#define DllExport __declspec( dllexport )
|
||
|
#endif // DllExport
|
||
|
|
||
|
|
||
|
//reserved key define for backwards compatability with old API
|
||
|
//all ISDM1 data falls under this key
|
||
|
#define BACKCOMP_KEY "BackCompatability"
|
||
|
//value type defines
|
||
|
#define DWORD_VALUE 2
|
||
|
#define STRING_VALUE 3
|
||
|
#define BINARY_VALUE 4
|
||
|
|
||
|
//handle prefix bit codes(these get appended to the actual memmap offset to generate a handle)
|
||
|
#define KEYBITCODE 0x6969
|
||
|
#define VALUEBITCODE 0xABBA
|
||
|
#define ROOTBITCODE 0x1234
|
||
|
|
||
|
//in case we want multiple roots, this can expand
|
||
|
#define ROOT_MAIN 0x0000
|
||
|
|
||
|
//this is the main root keys handle define
|
||
|
#define MAIN_ROOT_KEY MAKELONG(ROOT_MAIN,ROOTBITCODE)
|
||
|
|
||
|
//typedefs for each kind of handle
|
||
|
typedef DWORD KEY_HANDLE,*LPKEY_HANDLE;
|
||
|
typedef DWORD VALUE_HANDLE,*LPVALUE_HANDLE;
|
||
|
typedef DWORD EVENT_HANDLE,*LPEVENT_HANDLE;
|
||
|
|
||
|
//this structure is an internal status structure
|
||
|
//my test app accesses this for debug. You should never need this.
|
||
|
typedef struct INFODATASTRUCT
|
||
|
{
|
||
|
UINT uBindCount;
|
||
|
UINT uNumKeys;
|
||
|
UINT uMaxKeys;
|
||
|
UINT uNumValues;
|
||
|
UINT uMaxValues;
|
||
|
UINT uNumTableEntries;
|
||
|
UINT uMaxTableEntries;
|
||
|
UINT uNumEvents;
|
||
|
UINT uMaxEvents;
|
||
|
DWORD dwBytesFree;
|
||
|
DWORD dwMaxChars;
|
||
|
} INFO_DATA, *LPINFO_DATA;
|
||
|
|
||
|
//function typedefs
|
||
|
//supplier
|
||
|
typedef HRESULT (*ISD_CREATEKEY) (KEY_HANDLE, LPCTSTR, LPKEY_HANDLE);
|
||
|
typedef HRESULT (*ISD_CREATEVALUE) (KEY_HANDLE, LPCTSTR, DWORD,CONST BYTE *,DWORD,LPVALUE_HANDLE);
|
||
|
typedef HRESULT (*ISD_SETVALUE) (KEY_HANDLE, VALUE_HANDLE, LPCTSTR, DWORD, CONST BYTE *, DWORD);
|
||
|
//consumer
|
||
|
typedef HRESULT (*ISD_OPENKEY) (KEY_HANDLE, LPCSTR, LPKEY_HANDLE);
|
||
|
typedef HRESULT (*ISD_ENUMKEY) (KEY_HANDLE, DWORD, LPTSTR, LPDWORD, LPKEY_HANDLE);
|
||
|
typedef HRESULT (*ISD_ENUMVALUE) (KEY_HANDLE, DWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD, LPDWORD, LPVALUE_HANDLE);
|
||
|
typedef HRESULT (*ISD_QUERYINFOKEY) (KEY_HANDLE, LPSTR, LPDWORD, LPDWORD, LPDWORD);
|
||
|
typedef HRESULT (*ISD_QUERYINFOVALUE) (VALUE_HANDLE, LPSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD, LPDWORD, LPKEY_HANDLE);
|
||
|
typedef HRESULT (*ISD_NOTIFYCHANGEVALUE) (VALUE_HANDLE, HANDLE);
|
||
|
//used by either
|
||
|
typedef HRESULT (*ISD_DELETEKEY) (KEY_HANDLE);
|
||
|
typedef HRESULT (*ISD_DELETEVALUE) (KEY_HANDLE, VALUE_HANDLE, LPCSTR);
|
||
|
typedef BOOL (*ISD_GETSTRUCTDATA) (LPINFO_DATA);
|
||
|
typedef BOOL (*ISD_ISVALIDKEYHANDLE) (KEY_HANDLE);
|
||
|
typedef BOOL (*ISD_ISVALIDVALUEHANDLE) (VALUE_HANDLE);
|
||
|
typedef HRESULT (*ISD_COMPACTMEMORY) ();
|
||
|
|
||
|
//structure for ISDM entry points
|
||
|
typedef struct _ISDM2API
|
||
|
{
|
||
|
ISD_CREATEKEY ISD_CreateKey;
|
||
|
ISD_CREATEVALUE ISD_CreateValue;
|
||
|
ISD_SETVALUE ISD_SetValue;
|
||
|
ISD_OPENKEY ISD_OpenKey;
|
||
|
ISD_ENUMKEY ISD_EnumKey;
|
||
|
ISD_ENUMVALUE ISD_EnumValue;
|
||
|
ISD_QUERYINFOKEY ISD_QueryInfoKey;
|
||
|
ISD_QUERYINFOVALUE ISD_QueryInfoValue;
|
||
|
ISD_NOTIFYCHANGEVALUE ISD_NotifyChangeValue;
|
||
|
ISD_DELETEKEY ISD_DeleteKey;
|
||
|
ISD_DELETEVALUE ISD_DeleteValue;
|
||
|
ISD_GETSTRUCTDATA ISD_GetStructData;
|
||
|
ISD_ISVALIDKEYHANDLE ISD_IsValidKeyHandle;
|
||
|
ISD_ISVALIDVALUEHANDLE ISD_IsValidValueHandle;
|
||
|
ISD_COMPACTMEMORY ISD_CompactMemory;
|
||
|
}
|
||
|
ISDM2API, *LPISDM2API;
|
||
|
|
||
|
//HRESULT error defines
|
||
|
#define ISDM_ERROR_BASEB 0x8000
|
||
|
|
||
|
#define ERROR_INVALID_KEY_HANDLE ISDM_ERROR_BASEB + 1
|
||
|
#define ERROR_MORE_DATA_AVAILABLE ISDM_ERROR_BASEB + 2
|
||
|
#define ERROR_INVALID_STRING_POINTER ISDM_ERROR_BASEB + 3
|
||
|
#define ERROR_KEY_NOT_FOUND ISDM_ERROR_BASEB + 4
|
||
|
#define ERROR_VALUE_NOT_FOUND ISDM_ERROR_BASEB + 5
|
||
|
#define ERROR_NO_MORE_SESSIONS ISDM_ERROR_BASEB + 6
|
||
|
#define ERROR_INVALID_VALUE_HANDLE ISDM_ERROR_BASEB + 7
|
||
|
#define ERROR_FAILED_TO_GET_MEM_KEY ISDM_ERROR_BASEB + 8
|
||
|
#define ERROR_NO_PARENT ISDM_ERROR_BASEB + 9
|
||
|
#define ERROR_NO_PREV_SIBLING ISDM_ERROR_BASEB + 10
|
||
|
#define ERROR_NO_NEXT_SIBLING ISDM_ERROR_BASEB + 11
|
||
|
#define ERROR_NO_CHILD ISDM_ERROR_BASEB + 12
|
||
|
#define ERROR_INVALID_VALUE_TYPE ISDM_ERROR_BASEB + 13
|
||
|
#define ERROR_MALLOC_FAILURE ISDM_ERROR_BASEB + 14
|
||
|
#define ERROR_CREATE_KEY_FAILURE ISDM_ERROR_BASEB + 15
|
||
|
#define ERROR_NULL_PARAM ISDM_ERROR_BASEB + 16
|
||
|
#define ERROR_VALUE_EXISTS ISDM_ERROR_BASEB + 17
|
||
|
#define ERROR_FAILED_TO_GET_MEM_VALUE ISDM_ERROR_BASEB + 18
|
||
|
#define ERROR_NO_MORE_STR_SPACE ISDM_ERROR_BASEB + 19
|
||
|
#define ERROR_KEY_EXISTS ISDM_ERROR_BASEB + 20
|
||
|
#define ERROR_NO_MORE_KEY_SPACE ISDM_ERROR_BASEB + 21
|
||
|
#define ERROR_NO_MORE_VALUE_SPACE ISDM_ERROR_BASEB + 22
|
||
|
#define ERROR_INVALID_PARAM ISDM_ERROR_BASEB + 23
|
||
|
#define ERROR_ROOT_DELETE ISDM_ERROR_BASEB + 24
|
||
|
#define ERROR_NULL_STRING_TABLE_ENTRY ISDM_ERROR_BASEB + 25
|
||
|
#define ERROR_NO_MORE_TABLE_ENTRIES ISDM_ERROR_BASEB + 26
|
||
|
#define ERROR_ISDM_UNKNOWN ISDM_ERROR_BASEB + 27
|
||
|
#define ERROR_NOT_IMPLEMENTED ISDM_ERROR_BASEB + 28
|
||
|
#define ERROR_MALLOC_FAILED ISDM_ERROR_BASEB + 29
|
||
|
#define ERROR_FAILED_TO_GET_MEM_TABLE ISDM_ERROR_BASEB + 30
|
||
|
#define ERROR_SEMAPHORE_WAIT_FAIL ISDM_ERROR_BASEB + 31
|
||
|
#define ERROR_NO_MORE_EVENTS ISDM_ERROR_BASEB + 32
|
||
|
#define ERROR_INVALID_EVENT ISDM_ERROR_BASEB + 33
|
||
|
#define ERROR_INVALID_EVENT_HANDLE ISDM_ERROR_BASEB + 34
|
||
|
#define ERROR_EVENT_NONEXISTANT ISDM_ERROR_BASEB + 35
|
||
|
|
||
|
//token defines..these may just disappear
|
||
|
//RRCM
|
||
|
#define RRCM_LOCAL_STREAM 1
|
||
|
#define RRCM_REMOTE_STREAM 2
|
||
|
#define ISDM_RRCM_BASE 0x1000
|
||
|
|
||
|
#define ISDM_SSRC ISDM_RRCM_BASE + 1
|
||
|
#define ISDM_NUM_PCKT_SENT ISDM_RRCM_BASE + 2
|
||
|
#define ISDM_NUM_BYTES_SENT ISDM_RRCM_BASE + 3
|
||
|
#define ISDM_FRACTION_LOST ISDM_RRCM_BASE + 4
|
||
|
#define ISDM_CUM_NUM_PCKT_LOST ISDM_RRCM_BASE + 5
|
||
|
#define ISDM_XTEND_HIGHEST_SEQ_NUM ISDM_RRCM_BASE + 6
|
||
|
#define ISDM_INTERARRIVAL_JITTER ISDM_RRCM_BASE + 7
|
||
|
#define ISDM_LAST_SR ISDM_RRCM_BASE + 8
|
||
|
#define ISDM_DLSR ISDM_RRCM_BASE + 9
|
||
|
#define ISDM_NUM_BYTES_RCVD ISDM_RRCM_BASE + 10
|
||
|
#define ISDM_NUM_PCKT_RCVD ISDM_RRCM_BASE + 11
|
||
|
#define ISDM_NTP_FRAC ISDM_RRCM_BASE + 12
|
||
|
#define ISDM_NTP_SEC ISDM_RRCM_BASE + 13
|
||
|
#define ISDM_WHO_AM_I ISDM_RRCM_BASE + 14
|
||
|
|
||
|
//
|
||
|
//Supplier API
|
||
|
//
|
||
|
|
||
|
//NOTE: always refer to the Win32 Registry equivalent call for more information on the functionality of the call
|
||
|
|
||
|
//The create key call is similar to the RegCreateKeyEx call from Win32 in functionality
|
||
|
//NOTE: This call will create the new key or simply return the handle of the key if it already
|
||
|
//exists
|
||
|
extern DllExport HRESULT ISD_CreateKey
|
||
|
(
|
||
|
KEY_HANDLE hParentKey, //The key from which to create the new key(can be MAIN_ROOT_KEY)
|
||
|
LPCTSTR lpSubKey, //the subkey to create.(see RegCreateKeyEx for details)
|
||
|
LPKEY_HANDLE lphReturnKey//the handle of the newly created key
|
||
|
);
|
||
|
|
||
|
//The create value call is not part of the Win32 reg calls. It is here for symmetry in my API
|
||
|
//I prefer to use CreateValue then SetValue for my values, you can simply use SetValue and ignore
|
||
|
//CreateValue if you wish. The reason the registry has no such call is because they don't have
|
||
|
//a notion of a handle to a value. I felt it was very useful to have direct handles to the values for
|
||
|
//subsequent update calls.
|
||
|
extern DllExport HRESULT ISD_CreateValue
|
||
|
(
|
||
|
KEY_HANDLE hKey, //handle to the key that will own the new value
|
||
|
LPCTSTR lpName, //string ID of the value to be create
|
||
|
DWORD dwType, //type of value to create(DWORD,STRING,BINARY)
|
||
|
CONST BYTE *lpData, //pointer to value data
|
||
|
DWORD cbData, //size of the value data buffer
|
||
|
LPVALUE_HANDLE lphReturnValue //return handle to the newly created value
|
||
|
);
|
||
|
|
||
|
//SetValue is similar to the Win32 RegSetValueEx call
|
||
|
DllExport HRESULT ISD_SetValue
|
||
|
(
|
||
|
KEY_HANDLE hKey, //handle of valid key
|
||
|
VALUE_HANDLE hValue, //handle of value to set
|
||
|
LPCTSTR lpName, //address of value name of value to set
|
||
|
DWORD dwType, //flag for value type
|
||
|
CONST BYTE *lpData, //address of value data
|
||
|
DWORD cbData //size of value data
|
||
|
);
|
||
|
|
||
|
//
|
||
|
//Consumer API
|
||
|
//
|
||
|
|
||
|
//The OpenKey call is similar to the Win32 RegOpenKeyEx call
|
||
|
DllExport HRESULT ISD_OpenKey
|
||
|
(
|
||
|
KEY_HANDLE hKey, //handle of a valid key(can be MAIN_ROOT_KEY)
|
||
|
LPCSTR lpSubKey, //name of subkey to open
|
||
|
LPKEY_HANDLE lphReturnKey //handle of the opened key
|
||
|
);
|
||
|
|
||
|
|
||
|
//The EnumKey call is similar to the Win32 RegEnumKey call
|
||
|
//NOTES:
|
||
|
// If lpName is null the size of the name is returned into lpcbName and NOERROR is returned
|
||
|
DllExport HRESULT ISD_EnumKey
|
||
|
(
|
||
|
KEY_HANDLE hKey, //key to enumerate
|
||
|
DWORD dwIndex, //index of subkey to enumerate
|
||
|
LPTSTR lpName, //address of buffer for subkey name(can be NULL)
|
||
|
LPDWORD lpcbName, //address for size of subkey buffer (acts like the RegEnumKeyEx version of this param)
|
||
|
LPKEY_HANDLE lphReturnKey //handle of subkey(can be NULL)
|
||
|
);
|
||
|
|
||
|
//The EnumValue call is similar to the Win32 RegEnumValue call
|
||
|
DllExport HRESULT ISD_EnumValue
|
||
|
(
|
||
|
KEY_HANDLE hKey, //handle of key where value resides
|
||
|
DWORD dwIndex, //index of value to enum
|
||
|
LPTSTR lpName, //address of buffer for value name(can be NULL)
|
||
|
LPDWORD lpcbName, //address for size of value name buffer(can be NULL only if lpName is NULL)
|
||
|
LPDWORD lpType, //address for type of value(can be NULL if you don't care about type)
|
||
|
LPBYTE lpData, //address of buffer to receive the value data(can be NULL)
|
||
|
LPDWORD lpcbData, //address of size of buffer to receive the value data(can be NULL only if lpData is NULL)
|
||
|
LPDWORD lpTimeStamp, //address for timestamp on value(when last updated)(can be NULL)
|
||
|
LPVALUE_HANDLE lphReturnValue //address for handle of value(can be NULL)
|
||
|
);
|
||
|
|
||
|
//The QueryKeyInfo call is similar to the RegQueryInfoKey
|
||
|
DllExport HRESULT ISD_QueryInfoKey
|
||
|
(
|
||
|
KEY_HANDLE hKey, //handle of a valid key(can be MAIN_ROOT_KEY)
|
||
|
LPSTR lpKeyName, //buffer to receive the name of the key(can be NULL)
|
||
|
LPDWORD lpcbKeyName, //address of size of name buffer(can be null only if lpKeyName is NULL)
|
||
|
LPDWORD lpcNumKeys, //address for number of direct children of the key(can be NULL)
|
||
|
LPDWORD lpcNumValues //address for number of values under the key(can be NULL)
|
||
|
);
|
||
|
|
||
|
//The QueryValueInfo call is NOT similar to the Win32 RegQueryValueEx call
|
||
|
//you must supply a value handle, the Win32 call doesn't have a notion of such a thing
|
||
|
//You can get the handle with subsequent calls to EnumKey
|
||
|
//This is my consumer call to retrieve statistical data
|
||
|
//NOTES:
|
||
|
// If lpData is NULL and lpcbData is not, the function will return NOERROR with
|
||
|
// lpcbData containing the buffer size needed for the value
|
||
|
// If lpName is NULL and lpcbName is not, the function will return NOERROR with
|
||
|
// lpcbName containing the buffer size needed for the value
|
||
|
DllExport HRESULT ISD_QueryInfoValue
|
||
|
(
|
||
|
VALUE_HANDLE hValue, //handle of value to query
|
||
|
LPSTR lpName, //buffer to receive the name of the value(can be NULL)
|
||
|
LPDWORD lpcbName, //size of the name buffer(can only be NULL if lpName is NULL)
|
||
|
LPDWORD lpValueType, //address to receive the value type
|
||
|
LPBYTE lpData, //buffer to receive the value data(can be NULL)
|
||
|
LPDWORD lpcbData, //size of the value data buffer(can only be NULL if lpData is NULL)
|
||
|
LPDWORD lpTime, //address for timestamp on value(when last updated)(can be NULL)
|
||
|
LPKEY_HANDLE lphParentKey //return handle of the key that owns the value(can be NULL)
|
||
|
);
|
||
|
|
||
|
//NotifyChangeValue is somewhat similar to the Win32 RegNotifyChangeValue call
|
||
|
//I limit you to async notification and also to value notification(no key level notify..yet)
|
||
|
DllExport HRESULT ISD_NotifyChangeValue
|
||
|
(
|
||
|
VALUE_HANDLE hValue, //handle of the value to trigger an event from
|
||
|
HANDLE hEvent //handle to the event you want triggered when value changes
|
||
|
);
|
||
|
|
||
|
//
|
||
|
//shared API
|
||
|
//
|
||
|
|
||
|
//The DeleteKey call is similar to RegDeleteKey
|
||
|
DllExport HRESULT ISD_DeleteKey
|
||
|
(
|
||
|
KEY_HANDLE hKey //handle of key to delete
|
||
|
);
|
||
|
|
||
|
//The DeleteValue call is similar to the RegDeleteValue call
|
||
|
//NOTE: You must supply either hValue or lpValueName. If you have the hValue, use it
|
||
|
//and pass NULL for the value name.
|
||
|
DllExport HRESULT ISD_DeleteValue
|
||
|
(
|
||
|
KEY_HANDLE hKey, //handle of key that owns the value..if you have the value handle..pass NULL
|
||
|
VALUE_HANDLE hValue, //handle of value to delete(if known)..if known..pass NULL for key handle and name value
|
||
|
LPCSTR lpValueName //buffer holding name of value to delete(if known) pass NULL when hValue is known
|
||
|
);
|
||
|
|
||
|
//The GetStructData call is for retrieving structural info on ISDM itself. This is exposed so
|
||
|
//my test app can check the data structs. You should not need to call this.
|
||
|
DllExport BOOL ISD_GetStructData
|
||
|
(
|
||
|
LPINFO_DATA pInfo //structure holding ISDM structural info
|
||
|
);
|
||
|
|
||
|
//
|
||
|
//Handle validation calls
|
||
|
//
|
||
|
//use these anytime you want to check the validity of a handle to an ISDM object
|
||
|
DllExport BOOL ISD_IsValidKeyHandle
|
||
|
(
|
||
|
KEY_HANDLE hKey //handle to key
|
||
|
);
|
||
|
|
||
|
DllExport BOOL ISD_IsValidValueHandle
|
||
|
(
|
||
|
VALUE_HANDLE hValue //handle to value
|
||
|
);
|
||
|
|
||
|
//CompactMemory is my garbage collection function for ISDM. It is exported for
|
||
|
//test purposes with my browser app. You don't ever need to call this.
|
||
|
DllExport HRESULT ISD_CompactMemory
|
||
|
(
|
||
|
);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
} // End of extern "C" {
|
||
|
#endif // __cplusplus
|
||
|
|
||
|
#endif // __ISDMAPI2_H__
|