Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef UT_WIN_32_UUID_H
00021 #define UT_WIN_32_UUID_H
00022
00023 #include "ut_uuid.h"
00024 #include <windows.h>
00025 #include <wincrypt.h>
00026
00027 #if defined(__WINCRYPT_H__) && !defined(WINCRYPT32API)
00028
00029
00030
00031
00032
00033
00034
00035
00036 extern "C" {
00037 typedef unsigned long HCRYPTPROV;
00038
00039 WINADVAPI BOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags);
00040 WINADVAPI BOOL WINAPI CryptGenRandom(HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer);
00041 WINADVAPI BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *phProv, LPCSTR pszContainer,
00042 LPCSTR pszProvider, DWORD dwProvType, DWORD dwFlags);
00043 WINADVAPI BOOL WINAPI CryptAcquireContextW(HCRYPTPROV *phProv, LPCWSTR pszContainer,
00044 LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags);
00045
00046 #define CRYPT_VERIFYCONTEXT 0xF0000000
00047 #define PROV_RSA_FULL 1
00048
00049 #define CryptAcquireContext CryptAcquireContextW
00050 }
00051 #endif // #if defined(__WINCRYPT_H__) && !defined(WINCRYPT32API)
00052
00057 class ABI_EXPORT UT_Win32UUID : public UT_UUID
00058 {
00059 public:
00060
00061
00062
00063
00064
00065
00066 virtual ~UT_Win32UUID ();
00067
00068 protected:
00069 friend class UT_Win32UUIDGenerator;
00070
00071
00072 UT_Win32UUID():UT_UUID(){s_iInstCount++;}
00073
00074 UT_Win32UUID(const std::string &s):UT_UUID(s){s_iInstCount++;}
00075 UT_Win32UUID(const char *s):UT_UUID(s){s_iInstCount++;}
00076 UT_Win32UUID(const UT_UUID &u):UT_UUID(u){s_iInstCount++;}
00077 UT_Win32UUID(const UT_Win32UUID &u):UT_UUID((UT_UUID&)u){s_iInstCount++;}
00078 UT_Win32UUID(const struct uuid &u):UT_UUID(u){s_iInstCount++;}
00079
00080 virtual bool _getRandomBytes(void *buf, int nbytes);
00081
00082 private:
00083
00084
00085 static HCRYPTPROV s_hProv;
00086 static UT_sint32 s_iInstCount;
00087 };
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 class ABI_EXPORT UT_Win32UUIDGenerator : public UT_UUIDGenerator
00098 {
00099 public:
00100 UT_Win32UUIDGenerator():UT_UUIDGenerator(){};
00101 virtual ~UT_Win32UUIDGenerator(){};
00102
00103
00104
00105 virtual UT_UUID * createUUID(){UT_UUID *p=new UT_Win32UUID(); if(p)p->makeUUID(); return p;}
00106
00107 virtual UT_UUID * createUUID(const std::string &s){return new UT_Win32UUID(s);}
00108 virtual UT_UUID * createUUID(const char *s){return new UT_Win32UUID(s);}
00109 virtual UT_UUID * createUUID(const UT_UUID &u){return new UT_Win32UUID(u);}
00110 virtual UT_UUID * createUUID(const struct uuid &u){return new UT_Win32UUID(u);}
00111 };
00112
00113 #endif