KEYS.H
/*++ 
 
Copyright (c) 1997  Microsoft Corporation 
 
Module Name:    keys.h 
 
Abstract: 
 
    header file for reusable interface 
 
--*/ 
 
// Abstracted pointer 
typedef void * HKEYLIST; 
 
// 
// Retrieves and decodes inbound form data.  Builds list of keys, and 
// pointers to data within a content file.  Returns handle to first 
// element in the list. 
// 
 
HKEYLIST GetKeyList(IN EXTENSION_CONTROL_BLOCK *pECB); 
 
// 
// GetKeyInfo extracts the key name and content values from the 
// supplied key, and returns a handle to the next key in the list. 
// 
// The length is the exact length of the inbound data, but a NULL 
// is appended to the data.  For example, a text string of five 
// characters has a *pdwLength=5, but GetKeyBuffer returns at 
// least a 6 byte buffer--the five characters and a NULL. 
// 
 
HKEYLIST GetKeyInfo(IN HKEYLIST hKey, OUT LPCSTR *plpszKeyName,  
                    OUT LPDWORD pdwLength, OUT BOOL *pbHasCtrlChars, 
                    OUT LPINT pnInstance); 
 
// 
// GetKeyBuffer returns a pointer to the buffer holding data. 
// Depending on the implementation in keys.cpp, this may or may not 
// be a buffer the exact size of the data (it may be bigger). 
// 
// The data is zero-terminated. 
// 
 
LPBYTE GetKeyBuffer(IN HKEYLIST hKey); 
 
 
// 
// FindKey sequentially searches the linked list for a specific key. 
// The return handle can be used with GetKeyInfo to get more details. 
// FindKey returns the very first occurance of a duplicate key. 
// Also, it searches from the given key which need not be the head 
// key. 
// 
 
HKEYLIST FindKey(IN HKEYLIST hKeyList, IN LPCSTR lpszSearchName); 
 
 
// 
// FreeKeyList releases all of the memory associated with a key list. 
// Also, content resources are deleted. 
// 
 
void FreeKeyList(IN HKEYLIST hKeyList); 
 
 
// 
// GetKeyOffset returns the offset within the internal buffer or 
// the content file.  Under normal circumstances, use GetKeyInfo 
// and GetKeyBuffer instead of directly accessing the buffer. 
// 
 
DWORD GetKeyOffset(IN HKEYLIST hKey); 
 
 
#ifdef USE_TEMPORARY_FILES 
// 
// GetContentFile returns the name of the temporary file used 
// to save the content.  The temporary file may be open. 
// 
 
LPCTSTR GetContentFile(IN HKEYLIST hKeyList); 
 
// 
// CloseContentFile forces the content file to be closed.  This 
// allows you to pass the file to something else that may open 
// it.  Call OpenContentFile before calling any other key 
// function. 
// 
 
void CloseContentFile(IN HKEYLIST hKeyList); 
 
 
// 
// OpenContentFile forces the content file to be reopened. 
// GetKeyBuffer will fail if the content file was closed by 
// CloseContentFile, but not reopened. 
// 
 
void OpenContentFile(IN HKEYLIST hKeyList); 
 
#else 
 
// 
// GetDataBuffer returns a pointer to the start of the data 
// buffer which holds all content.  This function is not 
// particularly useful -- use GetKeyBuffer to get a pointer 
// to the buffer for a specific key. 
// 
 
LPBYTE GetDataBuffer(IN HKEYLIST hKey); 
 
#endif