HSDC_Sdk.h source

For the documentation for this page, see HSDC_Sdk.h

Copy
 #if defined( _MSC_VER ) && _MSC_VER >= 1100
 #pragma once
 #endif // _MSC_VER >= 1100
 
 #ifndef __HSDCAPIEXPORTS_H__
 #define __HSDCAPIEXPORTS_H__
 
 #include "HSDC_Sdk_Errors.h"
 
 #define HSDCAPI __stdcall
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 
     typedef enum _HSDCVersion : WORD {
         HSDCVersionUnknown = 0,
         HSDCVersion_1_0 = 0x0100,   // 1.0
     } HSDCVersion;
 
     HSDCError HSDCAPI HSDCStartup(WORD version, const char* jstr, const char* license);
     typedef HSDCError(HSDCAPI *fnHSDCStartup)(WORD version, const char* jstr, const char* license);
 
     HSDCError HSDCAPI HSDCCleanup();
     typedef HSDCError(HSDCAPI *fnHSDCCleanup)();
 
     HSDCError HSDCAPI HSDCGetVersion(WORD* pVersion);
     typedef HSDCError(HSDCAPI *fnHSDCGetVersion)(WORD* pVersion);
 
     HSDCError HSDCAPI HSDCFreeObject(void* pObj);
     typedef HSDCError(HSDCAPI *fnHSDCFreeObject)(void* pObj);
 
     HSDCError HSDCAPI HSDCGetConfiguration(char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCGetConfiguration)(char** pJstr);
 
     HSDCError HSDCAPI HSDCSetConfiguration(const char* jstr);
     typedef HSDCError(HSDCAPI *fnHSDCSetConfiguration)(const char* jstr);
 
     HSDCError HSDCAPI HSDCSetLogging(const char* logSetup);
     typedef HSDCError(HSDCAPI *fnHSDCSetLogging)(const char* logSetup);
 
     HSDCError HSDCAPI HSDCGetLogging(char** logSettingsOut);
     typedef HSDCError(HSDCAPI *fnHSDCGetLogging)(char** logSettingsOut);
     
     
     HSDCError HSDCAPI HSDCGetStringById(unsigned long id, wchar_t** pStr);
     typedef HSDCError(HSDCAPI *fnHSDCGetStringById)(unsigned long id, wchar_t** pStr);
 
     HSDCError HSDCAPI HSDCGetStrings(char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCGetStrings)(char** pJstr);
 
 
     typedef enum _HSDCHealth : DWORD {
         HSDCHealthUnknown = 0,
         HSDCHealthNotInstalled,
         HSDCHealthNotRunning,
         HSDCHealthOk,
     } HSDCHealth;
 
     typedef enum _HSDCHardening : DWORD {
         HSDCHardeningUnknown = 0,
         HSDCHardeningOff,
         HSDCHardeningRelaxed,
         HSDCHardeningOn,
     } HSDCHardening;
 
     HSDCError HSDCAPI HSDCGetHealth(DWORD* pHealth, DWORD* pHardening, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCGetHealth)(DWORD* pHealth, DWORD* pHardening, char** pJstr);
 
     HSDCError HSDCAPI HSDCRelaxHardening(const char* jstr, const unsigned char* signature, unsigned int signatureLength);
     typedef HSDCError(HSDCAPI *fnHSDCRelaxHardening)(const char* jstr, const unsigned char* signature, unsigned int signatureLength);
 
     HSDCError HSDCAPI HSDCRelaxHardeningWithTicket(const wchar_t* filename);
     typedef HSDCError(HSDCAPI *fnHSDCRelaxHardeningWithTicket)(const wchar_t* filename);
 
     typedef enum _HSDCConnectivityStatus : DWORD {
         HSDCStatusUnknown = 0,
         HSDCStatusOffline,
         HSDCStatusOnline,
     } HSDCConnectivityStatus;
 
     HSDCError HSDCAPI HSDCGetConnectivityStatus(DWORD* pStatus, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCGetConnectivityStatus)(DWORD* pStatus, char** pJstr);
 
     HSDCError HSDCAPI HSDCSetConnectivityStatus(DWORD status);
     typedef HSDCError(HSDCAPI *fnHSDCSetConnectivityStatus)(DWORD status);
 
     HSDCError HSDCAPI HSDCGatherDiagnosticInfo(const wchar_t* const outputPath = nullptr);
     typedef HSDCError(HSDCAPI *fnHSDCGatherDiagnosticInfo)(const wchar_t* const outputPath);
 
     
     HSDCError HSDCAPI HSDCGetSecurityIdentities(char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCGetSecurityIdentities)(char** pJstr);
 
     typedef enum _HSDCCertificateTypes : DWORD {
         HSDCCertificateMachine = 0,
         HSDCCertificateUser,
     } HSDCCertificateTypes;
 
     typedef enum _HSDCCertificateStores : DWORD {
         HSDCCertificateStoresLocal = 0,
         HSDCCertificateStoresAll,
     } HSDCCertificateStores;
 
     typedef enum _HSDCCertificateAccesses : DWORD {
         HSDCCertificateAccessPublic = 0,
         HSDCCertificateAccessPrivate,
     } HSDCCertificateAccesses;
 
     HSDCError HSDCAPI HSDCGetCertificates(DWORD type, DWORD store, DWORD access, const wchar_t* identity, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCGetCertificates)(DWORD type, DWORD store, DWORD access, const wchar_t* identity, char** pJstr);
 
     HSDCError HSDCAPI HSDCRequestCertificate(DWORD type, const char* jstr, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCRequestCertificate)(DWORD type, const char* jstr, char** pJstr);
 
 
 
     typedef enum _HSDCInventoryStatus : DWORD {
         HSDCInventoryStatusAll = 0,
         HSDCInventoryStatusOnline,
     } HSDCInventoryStatus;
 
     HSDCError HSDCAPI HSDCGetInventory(DWORD status, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCGetInventory)(DWORD status, char** pJstr);
 
     HSDCError HSDCAPI HSDCHashOpticalDisk(const wchar_t* path, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCHashOpticalDisk)(const wchar_t* path, char** pJstr);
 
     
     HSDCError HSDCAPI HSDCAccessCheckIsSystem(const wchar_t* path, BOOLEAN* pSystem);
     typedef HSDCError(HSDCAPI *fnHSDCAccessCheckIsSystem)();
 
 
     typedef enum _HSDCAccessCheckDepth : DWORD {
         HSDCAccessCheckDepthRights = 0,
         HSDCAccessCheckDepthRightsAndActions,
         HSDCAccessCheckDepthFull,
     } HSDCAccessCheckDepth;
 
     HSDCError HSDCAPI HSDCAccessCheckVolume(const wchar_t* path, const char* jstr, DWORD level, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCAccessCheckVolume)(const wchar_t* path, const char* jstr, DWORD level, char** pJstr);
     // Possible enhancements: 
     // add secondary accesses in the identifier node when present
     // add file types under content
 
     HSDCError HSDCAPI HSDCAccessCheck(const wchar_t* device, const char* jstr, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCAccessCheck)(const wchar_t* device, const char* jstr, char** pJstr);
 
     
     typedef void (HSDCAPI * HSDC_LOG_PROCESSOR_CALLBACK)(DWORD cookie, const char* jstr);
 
     HSDCError HSDCAPI HSDCRegisterLogProcessor(DWORD* pCookie, HSDC_LOG_PROCESSOR_CALLBACK cb);
     typedef HSDCError(HSDCAPI *fnHSDCRegisterLogProcessor)(DWORD* pCookie, HSDC_LOG_PROCESSOR_CALLBACK cb);
 
     HSDCError HSDCAPI HSDCUnregisterLogProcessor(DWORD cookie);
     typedef HSDCError(HSDCAPI *fnHSDCUnregisterLogProcessor)(DWORD cookie);
 
     typedef void (HSDCAPI * HSDC_SHADOW_PROCESSOR_CALLBACK)(DWORD cookie, const char* jstr, const wchar_t* filename);
 
     HSDCError HSDCAPI HSDCRegisterShadowProcessor(DWORD* pCookie, HSDC_SHADOW_PROCESSOR_CALLBACK cb);
     typedef HSDCError(HSDCAPI *fnHSDCRegisterShadowProcessor)(DWORD* pCookie, HSDC_SHADOW_PROCESSOR_CALLBACK cb);
 
     HSDCError HSDCAPI HSDCUnregisterShadowProcessor(DWORD cookie);
     typedef HSDCError(HSDCAPI *fnHSDCUnregisterShadowProcessor)(DWORD cookie);
 
     typedef HSDCError(HSDCAPI * HSDC_SHADOW_STREAM_CALLBACK)(unsigned long long offset, const unsigned char* buffer, unsigned int length, void* parameters);
 
     HSDCError HSDCAPI HSDCExtractShadowStream(const wchar_t* filename, char** pJstr, HSDC_SHADOW_STREAM_CALLBACK cb, void* parameters);
     typedef HSDCError(HSDCAPI *fnHSDCExtractShadowStream)(const wchar_t* filename, char** pJstr, HSDC_SHADOW_STREAM_CALLBACK cb, void* parameters);
 
     HSDCError HSDCAPI HSDCFetchLogs(BOOLEAN dismount, DWORD retry);
     typedef HSDCError(HSDCAPI *fnHSDCFetchLogs)(BOOLEAN dismount, DWORD retry);
 
 
     typedef void (HSDCAPI * HSDC_NOTIFICATION_PROCESSOR_CALLBACK)(DWORD cookie, DWORD sessionId, const char* jstr);
 
     HSDCError HSDCAPI HSDCRegisterNotificationProcessor(DWORD* pCookie, DWORD sessionId, const char* jstr, HSDC_NOTIFICATION_PROCESSOR_CALLBACK cb);
     typedef HSDCError(HSDCAPI *fnHSDCRegisterNotificationProcessor)(DWORD* pCookie, DWORD sessionId, const char* jstr, HSDC_NOTIFICATION_PROCESSOR_CALLBACK cb);
 
     HSDCError HSDCAPI HSDCUnregisterNotificationProcessor(DWORD cookie);
     typedef HSDCError(HSDCAPI *fnHSDCUnregisterNotificationProcessor)(DWORD cookie);
 
     
     HSDCError HSDCAPI HSDCPolicyImport(const char* jstr, const unsigned char* signature, unsigned int signatureLength);
     typedef HSDCError(HSDCAPI *fnHSDCPolicyImport)(const char* jstr, const unsigned char* signature, unsigned int signatureLength);
 
     HSDCError HSDCAPI HSDCPolicyImportFile(const wchar_t* filename);
     typedef HSDCError(HSDCAPI *fnHSDCPolicyImportFile)(const wchar_t* filename);
 
     HSDCError HSDCAPI HSDCPolicyRefresh();
     typedef HSDCError(HSDCAPI *fnHSDCPolicyRefresh)();
 
     HSDCError HSDCAPI HSDCPolicyGetOption(DWORD id, wchar_t** value);
     typedef HSDCError(HSDCAPI *fnHSDCPolicyGetOption)(DWORD id, wchar_t** value);
 
     
     HSDCError HSDCAPI HSDCTempOfflinePolicyRequest(const char* jstr, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCTempOfflinePolicyRequest)(const char* jstr, char** pJstr);
 
     HSDCError HSDCAPI HSDCTempOfflinePolicyAnswer(const char* jstr);
     typedef HSDCError(HSDCAPI *fnHSDCTempOfflinePolicyAnswer)(const char* jstr);
 
     
     typedef enum _HSDCPolicyFormat : DWORD {
         HSDCPolicyFormatOffline = 0,
         HSDCPolicyFormatCch,
         HSDCPolicyFormatSkr,
     } HSDCPolicyFormat;
 
     HSDCError HSDCAPI HSDCDumpPolicies(DWORD format, const wchar_t* path, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCDumpPolicies)(DWORD format, const wchar_t* path, char** pJstr);
 
     const wchar_t* const HSDCAPI HSDCErrorGetName(HSDCError error);
     typedef const wchar_t* const(HSDCAPI *fnHSDCErrorGetName)(HSDCError error);
 
     
     HSDCError HSDCAPI HSDCEncryptedVolumeGetStatus(const wchar_t* path, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCEncryptedVolumeGetStatus)(const wchar_t* path, char** pJstr);
 
     HSDCError HSDCAPI HSDCEncryptedVolumeEncrypt(const wchar_t* path, const char* jstr);
     typedef HSDCError(HSDCAPI *fnHSDCEncryptedVolumeEncrypt)(const wchar_t* path, const char* jstr);
 
     HSDCError HSDCAPI HSDCEncryptedVolumeUpgrade(const wchar_t* path, const char* jstr);
     typedef HSDCError(HSDCAPI *fnHSDCEncryptedVolumeUpgrade)(const wchar_t* path, const char* jstr);
 
     HSDCError HSDCAPI HSDCEncryptedVolumeChangePassword(const wchar_t* path, const char* jstr);
     typedef HSDCError(HSDCAPI *fnHSDCEncryptedVolumeChangePassword)(const wchar_t* path, const char* jstr);
 
     HSDCError HSDCAPI HSDCEncryptedVolumeDecrypt(const wchar_t* path, const char* jstr);
     typedef HSDCError(HSDCAPI *fnHSDCEncryptedVolumeDecrypt)(const wchar_t* path, const char* jstr);
 
     HSDCError HSDCAPI HSDCEncryptedVolumeImport(const wchar_t* path, const char* jstr);
     typedef HSDCError(HSDCAPI *fnHSDCEncryptedVolumeImport)(const wchar_t* path, const char* jstr);
 
     HSDCError HSDCAPI HSDCEncryptedVolumeExport(const wchar_t* path, const char* jstr, const wchar_t* folder);
     typedef HSDCError(HSDCAPI *fnHSDCEncryptedVolumeExport)(const wchar_t* path, const char* jstr, const wchar_t* folder);
 
     
     HSDCError HSDCAPI HSDCPasswordRecoveryRequest(const wchar_t* path, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCPasswordRecoveryRequest)(const wchar_t* path, char** pJstr);
 
     HSDCError HSDCAPI HSDCPasswordRecoveryAnswer(const wchar_t* path, const char* jstr);
     typedef HSDCError(HSDCAPI *fnHSDCPasswordRecoveryAnswer)(const wchar_t* path, const char* jstr);
 
     
     HSDCError HSDCAPI HSDCOpticalRecorderGetLetters(char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCOpticalRecorderGetLetters)(char** pJstr);
 
     HSDCError HSDCAPI HSDCOpticalRecorderGetDriveInformation(const wchar_t* path, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCOpticalRecorderGetDriveInformation)(const wchar_t* path, char** pJstr);
 
     HSDCError HSDCAPI HSDCOpticalRecorderGetDiskInformation(const wchar_t* path, char** pJstr);
     typedef HSDCError(HSDCAPI *fnHSDCOpticalRecorderGetDiskInformation)(const wchar_t* path, char** pJstr);
 
     HSDCError HSDCAPI HSDCOpticalRecorderBurn(const wchar_t* path, const char* jstr);
     typedef HSDCError(HSDCAPI *fnHSDCOpticalRecorderBurn)(const wchar_t* path, const char* jstr);
 
     HSDCError HSDCAPI HSDCOpticalRecorderErase(const wchar_t* path, const char* jstr);
     typedef HSDCError(HSDCAPI *fnHSDCOpticalRecorderErase)(const wchar_t* path, const char* jstr);
 
     HSDCError HSDCAPI HSDCOpticalRecorderCancel(const wchar_t* path);
     typedef HSDCError(HSDCAPI *fnHSDCOpticalRecorderCancel)(const wchar_t* path);
 
 
 
     HSDCError HSDCAPI HSDCIsBitLockerCapable(char** pJstr);
     typedef HSDCError(HSDCAPI* fnHSDCIsBitLockerCapable)(char** pJstr);
 
 
 
     HSDCError HSDCAPI HSDCEnableBitLocker(const wchar_t* pin, const char* unused);
     typedef HSDCError(HSDCAPI* fnHSDCEnableBitLocker)(const wchar_t* pin, const char* unused);
 
 
 
     //TODO
     HSDCError HSDCAPI HSDCNewKeyImport(const unsigned char* newKey, unsigned int newKeyLen, const unsigned char* signature, unsigned int signatureLength);
     typedef HSDCError(HSDCAPI* fnHSDCNewKeyImport)(const unsigned char* newKey, unsigned int newKeyLen, const unsigned char* signature, unsigned int signatureLength);
 
 
 
     // Hash
 
     HSDCError HSDCAPI HSDCCryptoHashBuffer(
         const wchar_t* algorithm,
         const unsigned char* buffer, unsigned int bufferLength,
         unsigned char* hash, unsigned int* hashLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoHashBuffer)(
         const wchar_t* algorithm,
         const unsigned char* buffer, unsigned int bufferLength,
         unsigned char* hash, unsigned int* hashLength);
 
     // NOTE: The XML documentation for Visual Studio does not play nicely with Doxygen. Code examples
     // that have quotes and angle brackets (STL!) require escaping making it difficult to read. On
     // top of that if you escape the " then Doxygen doesn't replace them in the docs. If you do not
     // escape them then Visual Studio will not display the tooltips. To get it all working you should
     // just break the example code out into a separate comment like below. The "\fn" tag is a
     // structural identifier which tells Doxygen to append this new comment to anything it already
     // has for the matching item.
 
 
     HSDCError HSDCAPI HSDCCryptoHashFile(
         const wchar_t* algorithm,
         const wchar_t* path,
         unsigned char* hash, unsigned int* hashLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoHashFile)(
         const wchar_t* algorithm,
         const wchar_t* path,
         unsigned char* hash, unsigned int* hashLength);
 
     // Asymmetric
 
     HSDCError HSDCAPI HSDCCryptoGenerateKeyPair(
         const wchar_t* algorithm,
         unsigned char* privateKey, unsigned int* privateKeyLength,
         unsigned char* publicKey, unsigned int* publicKeyLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoGenerateKeyPair)(
         const wchar_t* algorithm,
         unsigned char* privateKey, unsigned int* privateKeyLength,
         unsigned char* publicKey, unsigned int* publicKeyLength);
 
     
     // Asymmetric Signature
 
     HSDCError HSDCAPI HSDCCryptoSignBuffer(
         const wchar_t* algorithm,
         const unsigned char* buffer, unsigned int bufferLength,
         const unsigned char* privateKey, unsigned int privateKeyLength,
         unsigned char* signature, unsigned int* signatureLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoSignBuffer)(
         const wchar_t* algorithm,
         const unsigned char* buffer, unsigned int bufferLength,
         const unsigned char* privateKey, unsigned int privateKeyLength,
         unsigned char* signature, unsigned int* signatureLength);
 
     HSDCError HSDCAPI HSDCCryptoSignFile(
         const wchar_t* algorithm,
         const wchar_t* path,
         const unsigned char* privateKey, unsigned int privateKeyLength,
         unsigned char* signature, unsigned int* signatureLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoSignFile)(
         const wchar_t* algorithm,
         const wchar_t* path,
         const unsigned char* privateKey, unsigned int privateKeyLength,
         unsigned char* signature, unsigned int* signatureLength);
 
     HSDCError HSDCAPI HSDCCryptoCheckBufferSignature(
         const wchar_t* algorithm,
         const unsigned char* buffer, unsigned int bufferLength,
         const unsigned char* publicKey, unsigned int publicKeyLength,
         const unsigned char* signature, unsigned int signatureLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoCheckBufferSignature)(
         const wchar_t* algorithm,
         const unsigned char* buffer, unsigned int bufferLength,
         const unsigned char* publicKey, unsigned int publicKeyLength,
         const unsigned char* signature, unsigned int signatureLength);
 
     HSDCError HSDCAPI HSDCCryptoCheckFileSignature(
         const wchar_t* algorithm,
         const wchar_t* path,
         const unsigned char* publicKey, unsigned int publicKeyLength,
         const unsigned char* signature, unsigned int signatureLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoCheckFileSignature)(
         const wchar_t* algorithm,
         const wchar_t* path,
         const unsigned char* publicKey, unsigned int publicKeyLength,
         const unsigned char* signature, unsigned int signatureLength);
 
     // Asymmetric Encryption (RSA only for key exchange in MEDIUM-ENCRYPTED logs)
 
     HSDCError HSDCAPI HSDCCryptoEncryptBuffer(
         const wchar_t* algorithm,
         const unsigned char* plain, unsigned int plainLength,
         const unsigned char* publicKey, unsigned int publicKeyLength,
         unsigned char* cipher, unsigned int* cipherLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoEncryptBuffer)(
         const wchar_t* algorithm,
         const unsigned char* plain, unsigned int plainLength,
         const unsigned char* publicKey, unsigned int publicKeyLength,
         unsigned char* cipher, unsigned int* cipherLength);
 
 
     HSDCError HSDCAPI HSDCCryptoDecryptBuffer(
         const wchar_t* algorithm,
         const unsigned char* cipher, unsigned int cipherLength,
         const unsigned char* privateKey, unsigned int privateKeyLength,
         unsigned char* plain, unsigned int* plainLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoDecryptBuffer)(
         const wchar_t* algorithm,
         const unsigned char* cipher, unsigned int cipherLength,
         const unsigned char* privateKey, unsigned int privateKeyLength,
         unsigned char* plain, unsigned int* plainLength);
     
     // TODO
     // add similar methods with certificates (store(&SID)/thumbpints)
 
     // Symmetric Encryption
 
     HSDCError HSDCAPI HSDCCryptoSymEncryptBuffer(
         const wchar_t* algorithm,
         const unsigned char* plain, unsigned int plainLength,
         const unsigned char* symKey, unsigned int symKeyLength,
         const unsigned char* iV, unsigned int iVLength,
         unsigned char* cipher, unsigned int* cipherLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoSymEncryptBuffer)(
         const wchar_t* algorithm,
         const unsigned char* plain, unsigned int plainLength,
         const unsigned char* symKey, unsigned int symKeyLength,
         const unsigned char* iV, unsigned int iVLength,
         unsigned char* cipher, unsigned int* cipherLength);
 
     HSDCError HSDCAPI HSDCCryptoSymDecryptBuffer(
         const wchar_t* algorithm,
         const unsigned char* cipher, unsigned int cipherLength,
         const unsigned char* symKey, unsigned int symKeyLength,
         const unsigned char* iV, unsigned int iVLength,
         unsigned char* plain, unsigned int* plainLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoSymDecryptBuffer)(
         const wchar_t* algorithm,
         const unsigned char* cipher, unsigned int cipherLength,
         const unsigned char* symKey, unsigned int symKeyLength,
         const unsigned char* iV, unsigned int iVLength,
         unsigned char* plain, unsigned int* plainLength);
     
     // Base32 pretty encoding
     HSDCError HSDCAPI HSDCCryptoBase32Encode(
         const unsigned char* raw, unsigned int rawLength,
         unsigned char* encoded, unsigned int* encodedLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoBase32Encode)(
         const unsigned char* raw, unsigned int rawLength,
         unsigned char* encoded, unsigned int* encodedLength);
 
     HSDCError HSDCAPI HSDCCryptoBase32Decode(
         const unsigned char* encoded, unsigned int encodedLength,
         unsigned char* raw, unsigned int* rawLength);
     typedef HSDCError(HSDCAPI *fnHSDCCryptoBase32Decode)(
         const unsigned char* encoded, unsigned int encodedLength,
         unsigned char* raw, unsigned int* rawLength);
 
     void HSDCAPI CommandA(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow);
 
     void HSDCAPI CommandW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow);
 
     #ifdef UNICODE
     #define Command  CommandW
     #else
     #define Command  CommandA
     #endif // !UNICODE
 
 #ifdef __cplusplus
 };
 #endif
 
 #endif