Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

panda/src/wgldisplay/wglGraphicsWindow.cxx

Go to the documentation of this file.
00001 // Filename: wglGraphicsWindow.cxx
00002 // Created by:  drose (20Dec02)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
00008 //
00009 // All use of this software is subject to the terms of the Panda 3d
00010 // Software license.  You should have received a copy of this license
00011 // along with this source code; you will also find a current copy of
00012 // the license at http://www.panda3d.org/license.txt .
00013 //
00014 // To contact the maintainers of this program write to
00015 // panda3d@yahoogroups.com .
00016 //
00017 ////////////////////////////////////////////////////////////////////
00018 
00019 #include "wglGraphicsWindow.h"
00020 #include "config_wgldisplay.h"
00021 #include "config_windisplay.h"
00022 #include "wglGraphicsPipe.h"
00023 #include "glGraphicsStateGuardian.h"
00024 
00025 #include <wingdi.h>
00026 #include <ddraw.h>
00027 
00028 TypeHandle wglGraphicsWindow::_type_handle;
00029 
00030 static char *ConvDDErrorToString(const HRESULT &error);
00031 
00032 // spare me the trouble of linking with dxguid.lib or defining ALL the dx guids in this .obj by #defining INITGUID
00033 #define MY_DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
00034         EXTERN_C const GUID DECLSPEC_SELECTANY name \
00035                 = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
00036 
00037 MY_DEFINE_GUID(IID_IDirectDraw2, 0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56);
00038 
00039 ////////////////////////////////////////////////////////////////////
00040 //  Function: GetAvailVidMem
00041 //  Description: Uses DDraw to get available video memory
00042 ////////////////////////////////////////////////////////////////////
00043 static DWORD
00044 GetAvailVidMem() {
00045   LPDIRECTDRAW2 pDD2;
00046   LPDIRECTDRAW pDD;
00047   HRESULT hr;
00048 
00049   typedef HRESULT (WINAPI *DIRECTDRAWCREATEPROC)(GUID FAR *lpGUID,LPDIRECTDRAW FAR *lplpDD,IUnknown FAR *pUnkOuter);
00050   DIRECTDRAWCREATEPROC pfnDDCreate=NULL;
00051   
00052   HINSTANCE DDHinst = LoadLibrary("ddraw.dll");
00053   if (DDHinst == 0) {
00054     wgldisplay_cat.fatal() << "LoadLibrary() can't find DDRAW.DLL!" << endl;
00055     return 0x7FFFFFFF;
00056   }
00057   
00058   pfnDDCreate = (DIRECTDRAWCREATEPROC) GetProcAddress(DDHinst, "DirectDrawCreate");
00059   
00060   // just use DX5 DD interface, since that's the minimum ver we need
00061   if (NULL == pfnDDCreate) {
00062     wgldisplay_cat.fatal() << "GetProcAddress failed on DirectDrawCreate\n";
00063     FreeLibrary(DDHinst);
00064     return 0x7FFFFFFF;
00065   }
00066   
00067   // Create the Direct Draw Object
00068   hr = (*pfnDDCreate)((GUID *)DDCREATE_HARDWAREONLY, &pDD, NULL);
00069   if (hr != DD_OK) {
00070     wgldisplay_cat.fatal()
00071       << "DirectDrawCreate failed : result = " << ConvDDErrorToString(hr)
00072       << endl;
00073     FreeLibrary(DDHinst);
00074     return 0x7FFFFFFF;
00075   }
00076   
00077   FreeLibrary(DDHinst);    //undo LoadLib above, decrement ddrawl.dll refcnt (after DDrawCreate, since dont want to unload/reload)
00078   
00079   // need DDraw2 interface for GetAvailVidMem
00080   hr = pDD->QueryInterface(IID_IDirectDraw2, (LPVOID *)&pDD2);
00081   pDD->Release();
00082 
00083   if (hr != DD_OK) {
00084     wgldisplay_cat.fatal()
00085       << "DDraw QueryInterface failed : result = " << ConvDDErrorToString(hr)
00086       << endl;
00087     return 0x7FFFFFFF;
00088   }
00089   
00090   // Now we try to figure out if we can use requested screen
00091   // resolution and best rendertarget bpp and still have at least 2
00092   // meg of texture vidmem
00093   
00094   // Get Current VidMem avail.  Note this is only an estimate, when we
00095   // switch to fullscreen mode from desktop, more vidmem will be
00096   // available (typically 1.2 meg).  I dont want to switch to
00097   // fullscreen more than once due to the annoying monitor flicker, so
00098   // try to figure out optimal mode using this estimate
00099   DDSCAPS ddsCaps;
00100   DWORD dwTotal,dwFree;
00101   ZeroMemory(&ddsCaps,sizeof(DDSCAPS));
00102   ddsCaps.dwCaps = DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM;  // dont count AGP mem!
00103   if (FAILED(hr = pDD2->GetAvailableVidMem(&ddsCaps,&dwTotal,&dwFree))) {
00104     if (hr==DDERR_NODIRECTDRAWHW) {
00105       wgldisplay_cat.info() << "GetAvailableVidMem returns no-DDraw HW, assuming we have plenty of vidmem\n";
00106       dwTotal=dwFree=0x7FFFFFFF;
00107     } else {
00108       wgldisplay_cat.fatal() << "GetAvailableVidMem failed : result = " << ConvDDErrorToString(hr) << endl;
00109       dwTotal=dwFree=0x7FFFFFFF;
00110     }
00111   } else {
00112     if (wgldisplay_cat.is_debug()) {
00113       wgldisplay_cat.info() << "before FullScreen switch: GetAvailableVidMem returns Total: " << dwTotal/1000000.0 << "  Free: " << dwFree/1000000.0 << endl;
00114     }
00115 
00116     if (dwTotal==0) {
00117       wgldisplay_cat.info() << "GetAvailVidMem returns bogus total of 0, assuming we have plenty of vidmem\n";
00118       dwTotal=dwFree=0x7FFFFFFF;
00119     }
00120   }
00121   
00122   pDD2->Release();  // bye-bye ddraw
00123   return dwFree;
00124 }
00125 
00126 ////////////////////////////////////////////////////////////////////
00127 //     Function: wglGraphicsWindow::Constructor
00128 //       Access: Public
00129 //  Description:
00130 ////////////////////////////////////////////////////////////////////
00131 wglGraphicsWindow::
00132 wglGraphicsWindow(GraphicsPipe *pipe, GraphicsStateGuardian *gsg) :
00133   WinGraphicsWindow(pipe, gsg) 
00134 {
00135   _hdc = (HDC)0;
00136 }
00137 
00138 ////////////////////////////////////////////////////////////////////
00139 //     Function: wglGraphicsWindow::Destructor
00140 //       Access: Public, Virtual
00141 //  Description:
00142 ////////////////////////////////////////////////////////////////////
00143 wglGraphicsWindow::
00144 ~wglGraphicsWindow() {
00145 }
00146 
00147 ////////////////////////////////////////////////////////////////////
00148 //     Function: wglGraphicsWindow::make_current
00149 //       Access: Public, Virtual
00150 //  Description: This function will be called within the draw thread
00151 //               during begin_frame() to ensure the graphics context
00152 //               is ready for drawing.
00153 ////////////////////////////////////////////////////////////////////
00154 void wglGraphicsWindow::
00155 make_current() {
00156   wglGraphicsStateGuardian *wglgsg;
00157   DCAST_INTO_V(wglgsg, _gsg);
00158   wglMakeCurrent(_hdc, wglgsg->get_context(_hdc));
00159 
00160   // Now that we have made the context current to a window, we can
00161   // reset the GSG state if this is the first time it has been used.
00162   // (We can't just call reset() when we construct the GSG, because
00163   // reset() requires having a current context.)
00164   wglgsg->reset_if_new();
00165 }
00166 
00167 ////////////////////////////////////////////////////////////////////
00168 //     Function: wglGraphicsWindow::release_gsg
00169 //       Access: Public, Virtual
00170 //  Description: Releases the current GSG pointer, if it is currently
00171 //               held, and resets the GSG to NULL.  The window will be
00172 //               permanently unable to render; this is normally called
00173 //               only just before destroying the window.  This should
00174 //               only be called from within the draw thread.
00175 ////////////////////////////////////////////////////////////////////
00176 void wglGraphicsWindow::
00177 release_gsg() {
00178   wglMakeCurrent(_hdc, NULL);
00179   GraphicsWindow::release_gsg();
00180 }
00181 
00182 ////////////////////////////////////////////////////////////////////
00183 //     Function: wglGraphicsWindow::begin_flip
00184 //       Access: Public, Virtual
00185 //  Description: This function will be called within the draw thread
00186 //               after end_frame() has been called on all windows, to
00187 //               initiate the exchange of the front and back buffers.
00188 //
00189 //               This should instruct the window to prepare for the
00190 //               flip at the next video sync, but it should not wait.
00191 //
00192 //               We have the two separate functions, begin_flip() and
00193 //               end_flip(), to make it easier to flip all of the
00194 //               windows at the same time.
00195 ////////////////////////////////////////////////////////////////////
00196 void wglGraphicsWindow::
00197 begin_flip() {
00198   if (_gsg != (GraphicsStateGuardian *)NULL) {
00199     make_current();
00200     glFinish();
00201     SwapBuffers(_hdc);
00202   }
00203 }
00204 
00205 ////////////////////////////////////////////////////////////////////
00206 //     Function: wglGraphicsWindow::close_window
00207 //       Access: Protected, Virtual
00208 //  Description: Closes the window right now.  Called from the window
00209 //               thread.
00210 ////////////////////////////////////////////////////////////////////
00211 void wglGraphicsWindow::
00212 close_window() {
00213   ReleaseDC(_hWnd, _hdc);
00214   _hdc = (HDC)0;
00215   WinGraphicsWindow::close_window();
00216 }
00217 
00218 ////////////////////////////////////////////////////////////////////
00219 //     Function: wglGraphicsWindow::open_window
00220 //       Access: Protected, Virtual
00221 //  Description: Opens the window right now.  Called from the window
00222 //               thread.  Returns true if the window is successfully
00223 //               opened, or false if there was a problem.
00224 ////////////////////////////////////////////////////////////////////
00225 bool wglGraphicsWindow::
00226 open_window() {
00227   if (!WinGraphicsWindow::open_window()) {
00228     return false;
00229   }
00230 
00231   wglGraphicsStateGuardian *wglgsg;
00232   DCAST_INTO_R(wglgsg, _gsg, false);
00233 
00234   _hdc = GetDC(_hWnd);
00235 
00236   // Set up the pixel format of the window appropriately for GL.
00237   int pfnum = wglgsg->get_pfnum();
00238 
00239   PIXELFORMATDESCRIPTOR pixelformat;
00240   DescribePixelFormat(_hdc, pfnum, sizeof(PIXELFORMATDESCRIPTOR), 
00241                       &pixelformat);
00242 
00243 #ifdef _DEBUG
00244   char msg[200];
00245   sprintf(msg, "Selected GL PixelFormat is #%d", pfnum);
00246   print_pfd(&pixelformat, msg);
00247 #endif
00248 
00249   if (!SetPixelFormat(_hdc, pfnum, &pixelformat)) {
00250     wgldisplay_cat.error()
00251       << "SetPixelFormat(" << pfnum << ") failed after window create\n";
00252     close_window();
00253     return false;
00254   }
00255 
00256 #ifndef NDEBUG
00257   if (gl_force_invalid) {
00258     wgldisplay_cat.error()
00259       << "Artificially failing window.\n";
00260     close_window();
00261     return false;
00262   }
00263 #endif  // NDEBUG
00264 
00265   // Initializes _colormap
00266   setup_colormap(pixelformat);
00267 
00268   return true;
00269 }
00270 
00271 ////////////////////////////////////////////////////////////////////
00272 //     Function: wglGraphicsWindow::reconsider_fullscreen_size
00273 //       Access: Protected, Virtual
00274 //  Description: Called before creating a fullscreen window to give
00275 //               the driver a chance to adjust the particular
00276 //               resolution request, if necessary.
00277 ////////////////////////////////////////////////////////////////////
00278 void wglGraphicsWindow::
00279 reconsider_fullscreen_size(DWORD &x_size, DWORD &y_size, DWORD &bitdepth) {
00280   // Here we arbitrarily insist that low-memory cards can only open
00281   // 640x480 fullscreen windows.  It would probably be better to make
00282   // this decision at a higher level, or at least allow the app to
00283   // decide whether it wants to yield this decision to us, but this
00284   // will do for now.
00285 
00286   // Actually, this test doesn't even work on the Riva128 (the driver
00287   // reports a bogus value of 0 bytes available memory), and the
00288   // Riva128 works fine at 800x600 mode anyway.  It's not clear
00289   // whether any cards we are actively supported are helped by this or
00290   // not.
00291 
00292 #define LOWVIDMEMTHRESHOLD 3500000
00293   if (gl_do_vidmemsize_check && (GetAvailVidMem() < LOWVIDMEMTHRESHOLD)) {
00294     //_bIsLowVidMemCard = true;
00295     wgldisplay_cat.info()
00296       << "low video memory card detected, insisting on 640x480x16.\n";
00297     // we're going to need 640x480 at 16 bit to save enough tex vidmem
00298     x_size = 640;
00299     y_size = 480;
00300     bitdepth = 16;
00301   }
00302 }
00303 
00304 ////////////////////////////////////////////////////////////////////
00305 //     Function: wglGraphicsWindow::setup_colormap
00306 //       Access: Private
00307 //  Description: Sets up a colormap for the window matching the
00308 //               selected pixel format.  This is necessary before
00309 //               creating a GL context.
00310 ////////////////////////////////////////////////////////////////////
00311 void wglGraphicsWindow::
00312 setup_colormap(const PIXELFORMATDESCRIPTOR &pixelformat) {
00313   LOGPALETTE *logical;
00314   int n;
00315 
00316   if (!(pixelformat.dwFlags & PFD_NEED_PALETTE ||
00317       pixelformat.iPixelType == PFD_TYPE_COLORINDEX))
00318     return;
00319 
00320   n = 1 << pixelformat.cColorBits;
00321 
00322   /* allocate a bunch of memory for the logical palette (assume 256
00323      colors in a Win32 palette */
00324   logical = (LOGPALETTE*)malloc(sizeof(LOGPALETTE) +
00325                                 sizeof(PALETTEENTRY) * n);
00326   memset(logical, 0, sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * n);
00327 
00328   /* set the entries in the logical palette */
00329   logical->palVersion = 0x300;
00330   logical->palNumEntries = n;
00331 
00332   /* start with a copy of the current system palette */
00333   GetSystemPaletteEntries(_hdc, 0, 256, &logical->palPalEntry[0]);
00334 
00335   if (pixelformat.iPixelType == PFD_TYPE_RGBA) {
00336     int redMask = (1 << pixelformat.cRedBits) - 1;
00337     int greenMask = (1 << pixelformat.cGreenBits) - 1;
00338     int blueMask = (1 << pixelformat.cBlueBits) - 1;
00339     int i;
00340 
00341     /* fill in an RGBA color palette */
00342     for (i = 0; i < n; ++i) {
00343       logical->palPalEntry[i].peRed =
00344         (((i >> pixelformat.cRedShift)   & redMask)   * 255) / redMask;
00345       logical->palPalEntry[i].peGreen =
00346         (((i >> pixelformat.cGreenShift) & greenMask) * 255) / greenMask;
00347         logical->palPalEntry[i].peBlue =
00348         (((i >> pixelformat.cBlueShift)  & blueMask)  * 255) / blueMask;
00349       logical->palPalEntry[i].peFlags = 0;
00350     }
00351   }
00352 
00353   _colormap = CreatePalette(logical);
00354   free(logical);
00355 
00356   SelectPalette(_hdc, _colormap, FALSE);
00357   RealizePalette(_hdc);
00358 }
00359 
00360 #ifdef _DEBUG
00361 ////////////////////////////////////////////////////////////////////
00362 //     Function: wglGraphicsWindow::print_pfd
00363 //       Access: Private, Static
00364 //  Description: Reports information about the selected pixel format
00365 //               descriptor, along with the indicated message.
00366 ////////////////////////////////////////////////////////////////////
00367 void wglGraphicsWindow::
00368 print_pfd(PIXELFORMATDESCRIPTOR *pfd, char *msg) {
00369   OGLDriverType drvtype;
00370   if ((pfd->dwFlags & PFD_GENERIC_ACCELERATED) && 
00371       (pfd->dwFlags & PFD_GENERIC_FORMAT)) {
00372     drvtype=MCD;
00373   } else if (!(pfd->dwFlags & PFD_GENERIC_ACCELERATED) && !(pfd->dwFlags & PFD_GENERIC_FORMAT)) {
00374     drvtype=ICD;
00375   } else {
00376     drvtype=Software;
00377   }
00378 
00379 #define PRINT_FLAG(FLG) ((pfd->dwFlags &  PFD_##FLG) ? (" PFD_" #FLG "|") : "")
00380   wgldisplay_cat.spam()
00381     << "================================\n";
00382 
00383   wgldisplay_cat.spam()
00384     << msg << ", " << OGLDrvStrings[drvtype] << " driver\n"
00385     << "PFD flags: 0x" << (void*)pfd->dwFlags << " (" 
00386     << PRINT_FLAG(GENERIC_ACCELERATED) 
00387     << PRINT_FLAG(GENERIC_FORMAT)
00388     << PRINT_FLAG(DOUBLEBUFFER)
00389     << PRINT_FLAG(SUPPORT_OPENGL)
00390     << PRINT_FLAG(SUPPORT_GDI)
00391     << PRINT_FLAG(STEREO)
00392     << PRINT_FLAG(DRAW_TO_WINDOW)
00393     << PRINT_FLAG(DRAW_TO_BITMAP)
00394     << PRINT_FLAG(SWAP_EXCHANGE)
00395     << PRINT_FLAG(SWAP_COPY)
00396     << PRINT_FLAG(SWAP_LAYER_BUFFERS)
00397     << PRINT_FLAG(NEED_PALETTE)
00398     << PRINT_FLAG(NEED_SYSTEM_PALETTE)
00399     << PRINT_FLAG(SUPPORT_DIRECTDRAW) << ")\n"
00400     << "PFD iPixelType: "
00401     << ((pfd->iPixelType==PFD_TYPE_RGBA) ? "PFD_TYPE_RGBA":"PFD_TYPE_COLORINDEX")
00402     << endl
00403     << "PFD cColorBits: " << (DWORD)pfd->cColorBits
00404     << "  R: " << (DWORD)pfd->cRedBits
00405     <<" G: " << (DWORD)pfd->cGreenBits
00406     <<" B: " << (DWORD)pfd->cBlueBits << endl
00407     << "PFD cAlphaBits: " << (DWORD)pfd->cAlphaBits
00408     << "  DepthBits: " << (DWORD)pfd->cDepthBits
00409     <<" StencilBits: " << (DWORD)pfd->cStencilBits
00410     <<" AccumBits: " << (DWORD)pfd->cAccumBits
00411     << endl;
00412 }
00413 #endif
00414 
00415 
00416 static char *
00417 ConvDDErrorToString(const HRESULT &error) {
00418   switch(error) {
00419   case E_FAIL:
00420     return "Unspecified error E_FAIL";
00421     
00422   case DD_OK:
00423     return "No error.\0";
00424     
00425   case DDERR_ALREADYINITIALIZED     : // (5)
00426     return "DDERR_ALREADYINITIALIZED        ";//: // (5)
00427   case DDERR_CANNOTATTACHSURFACE        : // (10)
00428     return "DDERR_CANNOTATTACHSURFACE       ";//: // (10)
00429   case DDERR_CANNOTDETACHSURFACE        : // (20)
00430     return "DDERR_CANNOTDETACHSURFACE       ";//: // (20)
00431   case DDERR_CURRENTLYNOTAVAIL          : // (40)
00432     return "DDERR_CURRENTLYNOTAVAIL         ";//: // (40)
00433   case DDERR_EXCEPTION              : // (55)
00434     return "DDERR_EXCEPTION             ";//: // (55)
00435   case DDERR_HEIGHTALIGN            : // (90)
00436     return "DDERR_HEIGHTALIGN           ";//: // (90)
00437   case DDERR_INCOMPATIBLEPRIMARY        : // (95)
00438     return "DDERR_INCOMPATIBLEPRIMARY       ";//: // (95)
00439   case DDERR_INVALIDCAPS            : // (100)
00440     return "DDERR_INVALIDCAPS           ";//: // (100)
00441   case DDERR_INVALIDCLIPLIST            : // (110)
00442     return "DDERR_INVALIDCLIPLIST           ";//: // (110)
00443   case DDERR_INVALIDMODE            : // (120)
00444     return "DDERR_INVALIDMODE           ";//: // (120)
00445   case DDERR_INVALIDOBJECT          : // (130)
00446     return "DDERR_INVALIDOBJECT         ";//: // (130)
00447   case DDERR_INVALIDPIXELFORMAT     : // (145)
00448     return "DDERR_INVALIDPIXELFORMAT        ";//: // (145)
00449   case DDERR_INVALIDRECT            : // (150)
00450     return "DDERR_INVALIDRECT           ";//: // (150)
00451   case DDERR_LOCKEDSURFACES         : // (160)
00452     return "DDERR_LOCKEDSURFACES            ";//: // (160)
00453   case DDERR_NO3D               : // (170)
00454     return "DDERR_NO3D              ";//: // (170)
00455   case DDERR_NOALPHAHW              : // (180)
00456     return "DDERR_NOALPHAHW             ";//: // (180)
00457   case DDERR_NOCLIPLIST         : // (205)
00458     return "DDERR_NOCLIPLIST            ";//: // (205)
00459   case DDERR_NOCOLORCONVHW          : // (210)
00460     return "DDERR_NOCOLORCONVHW         ";//: // (210)
00461   case DDERR_NOCOOPERATIVELEVELSET      : // (212)
00462     return "DDERR_NOCOOPERATIVELEVELSET     ";//: // (212)
00463   case DDERR_NOCOLORKEY         : // (215)
00464     return "DDERR_NOCOLORKEY            ";//: // (215)
00465   case DDERR_NOCOLORKEYHW           : // (220)
00466     return "DDERR_NOCOLORKEYHW          ";//: // (220)
00467   case DDERR_NODIRECTDRAWSUPPORT        : // (222)
00468     return "DDERR_NODIRECTDRAWSUPPORT       ";//: // (222)
00469   case DDERR_NOEXCLUSIVEMODE            : // (225)
00470     return "DDERR_NOEXCLUSIVEMODE           ";//: // (225)
00471   case DDERR_NOFLIPHW               : // (230)
00472     return "DDERR_NOFLIPHW              ";//: // (230)
00473   case DDERR_NOGDI              : // (240)
00474     return "DDERR_NOGDI             ";//: // (240)
00475   case DDERR_NOMIRRORHW         : // (250)
00476     return "DDERR_NOMIRRORHW            ";//: // (250)
00477   case DDERR_NOTFOUND               : // (255)
00478     return "DDERR_NOTFOUND              ";//: // (255)
00479   case DDERR_NOOVERLAYHW            : // (260)
00480     return "DDERR_NOOVERLAYHW           ";//: // (260)
00481   case DDERR_NORASTEROPHW           : // (280)
00482     return "DDERR_NORASTEROPHW          ";//: // (280)
00483   case DDERR_NOROTATIONHW           : // (290)
00484     return "DDERR_NOROTATIONHW          ";//: // (290)
00485   case DDERR_NOSTRETCHHW            : // (310)
00486     return "DDERR_NOSTRETCHHW           ";//: // (310)
00487   case DDERR_NOT4BITCOLOR           : // (316)
00488     return "DDERR_NOT4BITCOLOR          ";//: // (316)
00489   case DDERR_NOT4BITCOLORINDEX          : // (317)
00490     return "DDERR_NOT4BITCOLORINDEX         ";//: // (317)
00491   case DDERR_NOT8BITCOLOR           : // (320)
00492     return "DDERR_NOT8BITCOLOR          ";//: // (320)
00493   case DDERR_NOTEXTUREHW            : // (330)
00494     return "DDERR_NOTEXTUREHW           ";//: // (330)
00495   case DDERR_NOVSYNCHW              : // (335)
00496     return "DDERR_NOVSYNCHW             ";//: // (335)
00497   case DDERR_NOZBUFFERHW            : // (340)
00498     return "DDERR_NOZBUFFERHW           ";//: // (340)
00499   case DDERR_NOZOVERLAYHW           : // (350)
00500     return "DDERR_NOZOVERLAYHW          ";//: // (350)
00501   case DDERR_OUTOFCAPS              : // (360)
00502     return "DDERR_OUTOFCAPS             ";//: // (360)
00503   case DDERR_OUTOFVIDEOMEMORY           : // (380)
00504     return "DDERR_OUTOFVIDEOMEMORY          ";//: // (380)
00505   case DDERR_OVERLAYCANTCLIP            : // (382)
00506     return "DDERR_OVERLAYCANTCLIP           ";//: // (382)
00507   case DDERR_OVERLAYCOLORKEYONLYONEACTIVE   : // (384)
00508     return "DDERR_OVERLAYCOLORKEYONLYONEACTIVE  ";//: // (384)
00509   case DDERR_PALETTEBUSY            : // (387)
00510     return "DDERR_PALETTEBUSY           ";//: // (387)
00511   case DDERR_COLORKEYNOTSET         : // (400)
00512     return "DDERR_COLORKEYNOTSET            ";//: // (400)
00513   case DDERR_SURFACEALREADYATTACHED     : // (410)
00514     return "DDERR_SURFACEALREADYATTACHED        ";//: // (410)
00515   case DDERR_SURFACEALREADYDEPENDENT        : // (420)
00516     return "DDERR_SURFACEALREADYDEPENDENT       ";//: // (420)
00517   case DDERR_SURFACEBUSY            : // (430)
00518     return "DDERR_SURFACEBUSY           ";//: // (430)
00519   case DDERR_CANTLOCKSURFACE                   : // (435)
00520     return "DDERR_CANTLOCKSURFACE";//: // (435)
00521   case DDERR_SURFACEISOBSCURED          : // (440)
00522     return "DDERR_SURFACEISOBSCURED         ";//: // (440)
00523   case DDERR_SURFACELOST            : // (450)
00524     return "DDERR_SURFACELOST           ";//: // (450)
00525   case DDERR_SURFACENOTATTACHED     : // (460)
00526     return "DDERR_SURFACENOTATTACHED        ";//: // (460)
00527   case DDERR_TOOBIGHEIGHT           : // (470)
00528     return "DDERR_TOOBIGHEIGHT          ";//: // (470)
00529   case DDERR_TOOBIGSIZE         : // (480)
00530     return "DDERR_TOOBIGSIZE            ";//: // (480)
00531   case DDERR_TOOBIGWIDTH            : // (490)
00532     return "DDERR_TOOBIGWIDTH           ";//: // (490)
00533   case DDERR_UNSUPPORTEDFORMAT          : // (510)
00534     return "DDERR_UNSUPPORTEDFORMAT         ";//: // (510)
00535   case DDERR_UNSUPPORTEDMASK            : // (520)
00536     return "DDERR_UNSUPPORTEDMASK           ";//: // (520)
00537   case DDERR_VERTICALBLANKINPROGRESS        : // (537)
00538     return "DDERR_VERTICALBLANKINPROGRESS       ";//: // (537)
00539   case DDERR_WASSTILLDRAWING            : // (540)
00540     return "DDERR_WASSTILLDRAWING           ";//: // (540)
00541   case DDERR_XALIGN             : // (560)
00542     return "DDERR_XALIGN                ";//: // (560)
00543   case DDERR_INVALIDDIRECTDRAWGUID      : // (561)
00544     return "DDERR_INVALIDDIRECTDRAWGUID     ";//: // (561)
00545   case DDERR_DIRECTDRAWALREADYCREATED       : // (562)
00546     return "DDERR_DIRECTDRAWALREADYCREATED      ";//: // (562)
00547   case DDERR_NODIRECTDRAWHW         : // (563)
00548     return "DDERR_NODIRECTDRAWHW            ";//: // (563)
00549   case DDERR_PRIMARYSURFACEALREADYEXISTS    : // (564)
00550     return "DDERR_PRIMARYSURFACEALREADYEXISTS   ";//: // (564)
00551   case DDERR_NOEMULATION            : // (565)
00552     return "DDERR_NOEMULATION           ";//: // (565)
00553   case DDERR_REGIONTOOSMALL         : // (566)
00554     return "DDERR_REGIONTOOSMALL            ";//: // (566)
00555   case DDERR_CLIPPERISUSINGHWND     : // (567)
00556     return "DDERR_CLIPPERISUSINGHWND        ";//: // (567)
00557   case DDERR_NOCLIPPERATTACHED          : // (568)
00558     return "DDERR_NOCLIPPERATTACHED         ";//: // (568)
00559   case DDERR_NOHWND             : // (569)
00560     return "DDERR_NOHWND                ";//: // (569)
00561   case DDERR_HWNDSUBCLASSED         : // (570)
00562     return "DDERR_HWNDSUBCLASSED            ";//: // (570)
00563   case DDERR_HWNDALREADYSET         : // (571)
00564     return "DDERR_HWNDALREADYSET            ";//: // (571)
00565   case DDERR_NOPALETTEATTACHED          : // (572)
00566     return "DDERR_NOPALETTEATTACHED         ";//: // (572)
00567   case DDERR_NOPALETTEHW            : // (573)
00568     return "DDERR_NOPALETTEHW           ";//: // (573)
00569   case DDERR_BLTFASTCANTCLIP            : // (574)
00570     return "DDERR_BLTFASTCANTCLIP           ";//: // (574)
00571   case DDERR_NOBLTHW                : // (575)
00572     return "DDERR_NOBLTHW               ";//: // (575)
00573   case DDERR_NODDROPSHW         : // (576)
00574     return "DDERR_NODDROPSHW            ";//: // (576)
00575   case DDERR_OVERLAYNOTVISIBLE          : // (577)
00576     return "DDERR_OVERLAYNOTVISIBLE         ";//: // (577)
00577   case DDERR_NOOVERLAYDEST          : // (578)
00578     return "DDERR_NOOVERLAYDEST         ";//: // (578)
00579   case DDERR_INVALIDPOSITION            : // (579)
00580     return "DDERR_INVALIDPOSITION           ";//: // (579)
00581   case DDERR_NOTAOVERLAYSURFACE     : // (580)
00582     return "DDERR_NOTAOVERLAYSURFACE        ";//: // (580)
00583   case DDERR_EXCLUSIVEMODEALREADYSET        : // (581)
00584     return "DDERR_EXCLUSIVEMODEALREADYSET       ";//: // (581)
00585   case DDERR_NOTFLIPPABLE           : // (582)
00586     return "DDERR_NOTFLIPPABLE          ";//: // (582)
00587   case DDERR_CANTDUPLICATE          : // (583)
00588     return "DDERR_CANTDUPLICATE         ";//: // (583)
00589   case DDERR_NOTLOCKED              : // (584)
00590     return "DDERR_NOTLOCKED             ";//: // (584)
00591   case DDERR_CANTCREATEDC           : // (585)
00592     return "DDERR_CANTCREATEDC          ";//: // (585)
00593   case DDERR_NODC               : // (586)
00594     return "DDERR_NODC              ";//: // (586)
00595   case DDERR_WRONGMODE              : // (587)
00596     return "DDERR_WRONGMODE             ";//: // (587)
00597   case DDERR_IMPLICITLYCREATED          : // (588)
00598     return "DDERR_IMPLICITLYCREATED         ";//: // (588)
00599   case DDERR_NOTPALETTIZED          : // (589)
00600     return "DDERR_NOTPALETTIZED         ";//: // (589)
00601   case DDERR_UNSUPPORTEDMODE            : // (590)
00602     return "DDERR_UNSUPPORTEDMODE           ";//: // (590)
00603   case DDERR_NOMIPMAPHW         : // (591)
00604     return "DDERR_NOMIPMAPHW            ";//: // (591)
00605   case DDERR_INVALIDSURFACETYPE                : // (592)
00606     return "DDERR_INVALIDSURFACETYPE";//: // (592)
00607   case DDERR_NOOPTIMIZEHW                      : // (600)
00608     return "DDERR_NOOPTIMIZEHW";//: // (600)
00609   case DDERR_NOTLOADED                         : // (601)
00610     return "DDERR_NOTLOADED";//: // (601)
00611   case DDERR_NOFOCUSWINDOW                     : // (602)
00612     return "DDERR_NOFOCUSWINDOW";//: // (602)
00613   case DDERR_DCALREADYCREATED           : // (620)
00614     return "DDERR_DCALREADYCREATED          ";//: // (620)
00615   case DDERR_NONONLOCALVIDMEM                  : // (630)
00616     return "DDERR_NONONLOCALVIDMEM";//: // (630)
00617   case DDERR_CANTPAGELOCK           : // (640)
00618     return "DDERR_CANTPAGELOCK          ";//: // (640)
00619   case DDERR_CANTPAGEUNLOCK         : // (660)
00620     return "DDERR_CANTPAGEUNLOCK            ";//: // (660)
00621   case DDERR_NOTPAGELOCKED          : // (680)
00622     return "DDERR_NOTPAGELOCKED         ";//: // (680)
00623   case DDERR_MOREDATA                   : // (690)
00624     return "DDERR_MOREDATA                  ";//: // (690)
00625   case DDERR_VIDEONOTACTIVE             : // (695)
00626     return "DDERR_VIDEONOTACTIVE            ";//: // (695)
00627   case DDERR_DEVICEDOESNTOWNSURFACE         : // (699)
00628     return "DDERR_DEVICEDOESNTOWNSURFACE        ";//: // (699)
00629 
00630   case E_UNEXPECTED                     :
00631     return "E_UNEXPECTED                     ";
00632   case E_NOTIMPL                        :
00633     return "E_NOTIMPL                        ";
00634   case E_OUTOFMEMORY                    :
00635     return "E_OUTOFMEMORY                    ";
00636   case E_INVALIDARG                     :
00637     return "E_INVALIDARG or DDERR_INVALIDPARAMS";
00638   case E_NOINTERFACE                    :
00639     return "E_NOINTERFACE                    ";
00640   case E_POINTER                        :
00641     return "E_POINTER                        ";
00642   case E_HANDLE                         :
00643     return "E_HANDLE                         ";
00644   case E_ABORT                          :
00645     return "E_ABORT                          ";
00646     //    case E_FAIL                           :
00647     //    return "E_FAIL                           ";
00648   case E_ACCESSDENIED                   :
00649     return "E_ACCESSDENIED                   ";
00650   case E_PENDING                        :
00651     return "E_PENDING                        ";
00652   case CO_E_INIT_TLS                    :
00653     return "CO_E_INIT_TLS                    ";
00654   case CO_E_INIT_SHARED_ALLOCATOR       :
00655     return "CO_E_INIT_SHARED_ALLOCATOR       ";
00656   case CO_E_INIT_MEMORY_ALLOCATOR       :
00657     return "CO_E_INIT_MEMORY_ALLOCATOR       ";
00658   case CO_E_INIT_CLASS_CACHE            :
00659     return "CO_E_INIT_CLASS_CACHE            ";
00660   case CO_E_INIT_RPC_CHANNEL            :
00661     return "CO_E_INIT_RPC_CHANNEL            ";
00662   case CO_E_INIT_TLS_SET_CHANNEL_CONTROL :
00663     return "CO_E_INIT_TLS_SET_CHANNEL_CONTROL ";
00664   case CO_E_INIT_TLS_CHANNEL_CONTROL    :
00665     return "CO_E_INIT_TLS_CHANNEL_CONTROL    ";
00666   case CO_E_INIT_UNACCEPTED_USER_ALLOCATOR :
00667     return "CO_E_INIT_UNACCEPTED_USER_ALLOCATOR ";
00668   case CO_E_INIT_SCM_MUTEX_EXISTS       :
00669     return "CO_E_INIT_SCM_MUTEX_EXISTS       ";
00670   case CO_E_INIT_SCM_FILE_MAPPING_EXISTS :
00671     return "CO_E_INIT_SCM_FILE_MAPPING_EXISTS ";
00672   case CO_E_INIT_SCM_MAP_VIEW_OF_FILE   :
00673     return "CO_E_INIT_SCM_MAP_VIEW_OF_FILE   ";
00674   case CO_E_INIT_SCM_EXEC_FAILURE       :
00675     return "CO_E_INIT_SCM_EXEC_FAILURE       ";
00676   case CO_E_INIT_ONLY_SINGLE_THREADED   :
00677     return "CO_E_INIT_ONLY_SINGLE_THREADED   ";
00678   case CO_E_CANT_REMOTE                 :
00679     return "CO_E_CANT_REMOTE                 ";
00680   case CO_E_BAD_SERVER_NAME             :
00681     return "CO_E_BAD_SERVER_NAME             ";
00682   case CO_E_WRONG_SERVER_IDENTITY       :
00683     return "CO_E_WRONG_SERVER_IDENTITY       ";
00684   case CO_E_OLE1DDE_DISABLED            :
00685     return "CO_E_OLE1DDE_DISABLED            ";
00686   case CO_E_RUNAS_SYNTAX                :
00687     return "CO_E_RUNAS_SYNTAX                ";
00688   case CO_E_CREATEPROCESS_FAILURE       :
00689     return "CO_E_CREATEPROCESS_FAILURE       ";
00690   case CO_E_RUNAS_CREATEPROCESS_FAILURE :
00691     return "CO_E_RUNAS_CREATEPROCESS_FAILURE ";
00692   case CO_E_RUNAS_LOGON_FAILURE         :
00693     return "CO_E_RUNAS_LOGON_FAILURE         ";
00694   case CO_E_LAUNCH_PERMSSION_DENIED     :
00695     return "CO_E_LAUNCH_PERMSSION_DENIED     ";
00696   case CO_E_START_SERVICE_FAILURE       :
00697     return "CO_E_START_SERVICE_FAILURE       ";
00698   case CO_E_REMOTE_COMMUNICATION_FAILURE :
00699     return "CO_E_REMOTE_COMMUNICATION_FAILURE ";
00700   case CO_E_SERVER_START_TIMEOUT        :
00701     return "CO_E_SERVER_START_TIMEOUT        ";
00702   case CO_E_CLSREG_INCONSISTENT         :
00703     return "CO_E_CLSREG_INCONSISTENT         ";
00704   case CO_E_IIDREG_INCONSISTENT         :
00705     return "CO_E_IIDREG_INCONSISTENT         ";
00706   case CO_E_NOT_SUPPORTED               :
00707     return "CO_E_NOT_SUPPORTED               ";
00708   case CO_E_RELOAD_DLL                  :
00709     return "CO_E_RELOAD_DLL                  ";
00710   case CO_E_MSI_ERROR                   :
00711     return "CO_E_MSI_ERROR                   ";
00712   case OLE_E_OLEVERB                    :
00713     return "OLE_E_OLEVERB                    ";
00714   case OLE_E_ADVF                       :
00715     return "OLE_E_ADVF                       ";
00716   case OLE_E_ENUM_NOMORE                :
00717     return "OLE_E_ENUM_NOMORE                ";
00718   case OLE_E_ADVISENOTSUPPORTED         :
00719     return "OLE_E_ADVISENOTSUPPORTED         ";
00720   case OLE_E_NOCONNECTION               :
00721     return "OLE_E_NOCONNECTION               ";
00722   case OLE_E_NOTRUNNING                 :
00723     return "OLE_E_NOTRUNNING                 ";
00724   case OLE_E_NOCACHE                    :
00725     return "OLE_E_NOCACHE                    ";
00726   case OLE_E_BLANK                      :
00727     return "OLE_E_BLANK                      ";
00728   case OLE_E_CLASSDIFF                  :
00729     return "OLE_E_CLASSDIFF                  ";
00730   case OLE_E_CANT_GETMONIKER            :
00731     return "OLE_E_CANT_GETMONIKER            ";
00732   case OLE_E_CANT_BINDTOSOURCE          :
00733     return "OLE_E_CANT_BINDTOSOURCE          ";
00734   case OLE_E_STATIC                     :
00735     return "OLE_E_STATIC                     ";
00736   case OLE_E_PROMPTSAVECANCELLED        :
00737     return "OLE_E_PROMPTSAVECANCELLED        ";
00738   case OLE_E_INVALIDRECT                :
00739     return "OLE_E_INVALIDRECT                ";
00740   case OLE_E_WRONGCOMPOBJ               :
00741     return "OLE_E_WRONGCOMPOBJ               ";
00742   case OLE_E_INVALIDHWND                :
00743     return "OLE_E_INVALIDHWND                ";
00744   case OLE_E_NOT_INPLACEACTIVE          :
00745     return "OLE_E_NOT_INPLACEACTIVE          ";
00746   case OLE_E_CANTCONVERT                :
00747     return "OLE_E_CANTCONVERT                ";
00748   case OLE_E_NOSTORAGE                  :
00749     return "OLE_E_NOSTORAGE                  ";
00750   case DV_E_FORMATETC                   :
00751     return "DV_E_FORMATETC                   ";
00752   case DV_E_DVTARGETDEVICE              :
00753     return "DV_E_DVTARGETDEVICE              ";
00754   case DV_E_STGMEDIUM                   :
00755     return "DV_E_STGMEDIUM                   ";
00756   case DV_E_STATDATA                    :
00757     return "DV_E_STATDATA                    ";
00758   case DV_E_LINDEX                      :
00759     return "DV_E_LINDEX                      ";
00760   case DV_E_TYMED                       :
00761     return "DV_E_TYMED                       ";
00762   case DV_E_CLIPFORMAT                  :
00763     return "DV_E_CLIPFORMAT                  ";
00764   case DV_E_DVASPECT                    :
00765     return "DV_E_DVASPECT                    ";
00766   case DV_E_DVTARGETDEVICE_SIZE         :
00767     return "DV_E_DVTARGETDEVICE_SIZE         ";
00768   case DV_E_NOIVIEWOBJECT               :
00769     return "DV_E_NOIVIEWOBJECT               ";
00770   case DRAGDROP_E_NOTREGISTERED         :
00771     return "DRAGDROP_E_NOTREGISTERED         ";
00772   case DRAGDROP_E_ALREADYREGISTERED     :
00773     return "DRAGDROP_E_ALREADYREGISTERED     ";
00774   case DRAGDROP_E_INVALIDHWND           :
00775     return "DRAGDROP_E_INVALIDHWND           ";
00776   case CLASS_E_NOAGGREGATION            :
00777     return "CLASS_E_NOAGGREGATION            ";
00778   case CLASS_E_CLASSNOTAVAILABLE        :
00779     return "CLASS_E_CLASSNOTAVAILABLE        ";
00780   case CLASS_E_NOTLICENSED              :
00781     return "CLASS_E_NOTLICENSED              ";
00782   case VIEW_E_DRAW                      :
00783     return "VIEW_E_DRAW                      ";
00784   case REGDB_E_READREGDB                :
00785     return "REGDB_E_READREGDB                ";
00786   case REGDB_E_WRITEREGDB               :
00787     return "REGDB_E_WRITEREGDB               ";
00788   case REGDB_E_KEYMISSING               :
00789     return "REGDB_E_KEYMISSING               ";
00790   case REGDB_E_INVALIDVALUE             :
00791     return "REGDB_E_INVALIDVALUE             ";
00792   case REGDB_E_CLASSNOTREG              :
00793     return "REGDB_E_CLASSNOTREG              ";
00794   case REGDB_E_IIDNOTREG                :
00795     return "REGDB_E_IIDNOTREG                ";
00796   case CAT_E_CATIDNOEXIST               :
00797     return "CAT_E_CATIDNOEXIST               ";
00798   case CAT_E_NODESCRIPTION              :
00799     return "CAT_E_NODESCRIPTION              ";
00800   case CS_E_PACKAGE_NOTFOUND            :
00801     return "CS_E_PACKAGE_NOTFOUND            ";
00802   case CS_E_NOT_DELETABLE               :
00803     return "CS_E_NOT_DELETABLE               ";
00804   case CS_E_CLASS_NOTFOUND              :
00805     return "CS_E_CLASS_NOTFOUND              ";
00806   case CS_E_INVALID_VERSION             :
00807     return "CS_E_INVALID_VERSION             ";
00808   case CS_E_NO_CLASSSTORE               :
00809     return "CS_E_NO_CLASSSTORE               ";
00810   case CACHE_E_NOCACHE_UPDATED          :
00811     return "CACHE_E_NOCACHE_UPDATED          ";
00812   case OLEOBJ_E_NOVERBS                 :
00813     return "OLEOBJ_E_NOVERBS                 ";
00814   case OLEOBJ_E_INVALIDVERB             :
00815     return "OLEOBJ_E_INVALIDVERB             ";
00816   case INPLACE_E_NOTUNDOABLE            :
00817     return "INPLACE_E_NOTUNDOABLE            ";
00818   case INPLACE_E_NOTOOLSPACE            :
00819     return "INPLACE_E_NOTOOLSPACE            ";
00820   case CONVERT10_E_OLESTREAM_GET        :
00821     return "CONVERT10_E_OLESTREAM_GET        ";
00822   case CONVERT10_E_OLESTREAM_PUT        :
00823     return "CONVERT10_E_OLESTREAM_PUT        ";
00824   case CONVERT10_E_OLESTREAM_FMT        :
00825     return "CONVERT10_E_OLESTREAM_FMT        ";
00826   case CONVERT10_E_OLESTREAM_BITMAP_TO_DIB :
00827     return "CONVERT10_E_OLESTREAM_BITMAP_TO_DIB ";
00828   case CONVERT10_E_STG_FMT              :
00829     return "CONVERT10_E_STG_FMT              ";
00830   case CONVERT10_E_STG_NO_STD_STREAM    :
00831     return "CONVERT10_E_STG_NO_STD_STREAM    ";
00832   case CONVERT10_E_STG_DIB_TO_BITMAP    :
00833     return "CONVERT10_E_STG_DIB_TO_BITMAP    ";
00834   case CLIPBRD_E_CANT_OPEN              :
00835     return "CLIPBRD_E_CANT_OPEN              ";
00836   case CLIPBRD_E_CANT_EMPTY             :
00837     return "CLIPBRD_E_CANT_EMPTY             ";
00838   case CLIPBRD_E_CANT_SET               :
00839     return "CLIPBRD_E_CANT_SET               ";
00840   case CLIPBRD_E_BAD_DATA               :
00841     return "CLIPBRD_E_BAD_DATA               ";
00842   case CLIPBRD_E_CANT_CLOSE             :
00843     return "CLIPBRD_E_CANT_CLOSE             ";
00844   case MK_E_CONNECTMANUALLY             :
00845     return "MK_E_CONNECTMANUALLY             ";
00846   case MK_E_EXCEEDEDDEADLINE            :
00847     return "MK_E_EXCEEDEDDEADLINE            ";
00848   case MK_E_NEEDGENERIC                 :
00849     return "MK_E_NEEDGENERIC                 ";
00850   case MK_E_UNAVAILABLE                 :
00851     return "MK_E_UNAVAILABLE                 ";
00852   case MK_E_SYNTAX                      :
00853     return "MK_E_SYNTAX                      ";
00854   case MK_E_NOOBJECT                    :
00855     return "MK_E_NOOBJECT                    ";
00856   case MK_E_INVALIDEXTENSION            :
00857     return "MK_E_INVALIDEXTENSION            ";
00858   case MK_E_INTERMEDIATEINTERFACENOTSUPPORTED :
00859     return "MK_E_INTERMEDIATEINTERFACENOTSUPPORTED ";
00860   case MK_E_NOTBINDABLE                 :
00861     return "MK_E_NOTBINDABLE                 ";
00862   case MK_E_NOTBOUND                    :
00863     return "MK_E_NOTBOUND                    ";
00864   case MK_E_CANTOPENFILE                :
00865     return "MK_E_CANTOPENFILE                ";
00866   case MK_E_MUSTBOTHERUSER              :
00867     return "MK_E_MUSTBOTHERUSER              ";
00868   case MK_E_NOINVERSE                   :
00869     return "MK_E_NOINVERSE                   ";
00870   case MK_E_NOSTORAGE                   :
00871     return "MK_E_NOSTORAGE                   ";
00872   case MK_E_NOPREFIX                    :
00873     return "MK_E_NOPREFIX                    ";
00874   case MK_E_ENUMERATION_FAILED          :
00875     return "MK_E_ENUMERATION_FAILED          ";
00876   case CO_E_NOTINITIALIZED              :
00877     return "CO_E_NOTINITIALIZED              ";
00878   case CO_E_ALREADYINITIALIZED          :
00879     return "CO_E_ALREADYINITIALIZED          ";
00880   case CO_E_CANTDETERMINECLASS          :
00881     return "CO_E_CANTDETERMINECLASS          ";
00882   case CO_E_CLASSSTRING                 :
00883     return "CO_E_CLASSSTRING                 ";
00884   case CO_E_IIDSTRING                   :
00885     return "CO_E_IIDSTRING                   ";
00886   case CO_E_APPNOTFOUND                 :
00887     return "CO_E_APPNOTFOUND                 ";
00888   case CO_E_APPSINGLEUSE                :
00889     return "CO_E_APPSINGLEUSE                ";
00890   case CO_E_ERRORINAPP                  :
00891     return "CO_E_ERRORINAPP                  ";
00892   case CO_E_DLLNOTFOUND                 :
00893     return "CO_E_DLLNOTFOUND                 ";
00894   case CO_E_ERRORINDLL                  :
00895     return "CO_E_ERRORINDLL                  ";
00896   case CO_E_WRONGOSFORAPP               :
00897     return "CO_E_WRONGOSFORAPP               ";
00898   case CO_E_OBJNOTREG                   :
00899     return "CO_E_OBJNOTREG                   ";
00900   case CO_E_OBJISREG                    :
00901     return "CO_E_OBJISREG                    ";
00902   case CO_E_OBJNOTCONNECTED             :
00903     return "CO_E_OBJNOTCONNECTED             ";
00904   case CO_E_APPDIDNTREG                 :
00905     return "CO_E_APPDIDNTREG                 ";
00906   case CO_E_RELEASED                    :
00907     return "CO_E_RELEASED                    ";
00908   case CO_E_FAILEDTOIMPERSONATE         :
00909     return "CO_E_FAILEDTOIMPERSONATE         ";
00910   case CO_E_FAILEDTOGETSECCTX           :
00911     return "CO_E_FAILEDTOGETSECCTX           ";
00912   case CO_E_FAILEDTOOPENTHREADTOKEN     :
00913     return "CO_E_FAILEDTOOPENTHREADTOKEN     ";
00914   case CO_E_FAILEDTOGETTOKENINFO        :
00915     return "CO_E_FAILEDTOGETTOKENINFO        ";
00916   case CO_E_TRUSTEEDOESNTMATCHCLIENT    :
00917     return "CO_E_TRUSTEEDOESNTMATCHCLIENT    ";
00918   case CO_E_FAILEDTOQUERYCLIENTBLANKET  :
00919     return "CO_E_FAILEDTOQUERYCLIENTBLANKET  ";
00920   case CO_E_FAILEDTOSETDACL             :
00921     return "CO_E_FAILEDTOSETDACL             ";
00922   case CO_E_ACCESSCHECKFAILED           :
00923     return "CO_E_ACCESSCHECKFAILED           ";
00924   case CO_E_NETACCESSAPIFAILED          :
00925     return "CO_E_NETACCESSAPIFAILED          ";
00926   case CO_E_WRONGTRUSTEENAMESYNTAX      :
00927     return "CO_E_WRONGTRUSTEENAMESYNTAX      ";
00928   case CO_E_INVALIDSID                  :
00929     return "CO_E_INVALIDSID                  ";
00930   case CO_E_CONVERSIONFAILED            :
00931     return "CO_E_CONVERSIONFAILED            ";
00932   case CO_E_NOMATCHINGSIDFOUND          :
00933     return "CO_E_NOMATCHINGSIDFOUND          ";
00934   case CO_E_LOOKUPACCSIDFAILED          :
00935     return "CO_E_LOOKUPACCSIDFAILED          ";
00936   case CO_E_NOMATCHINGNAMEFOUND         :
00937     return "CO_E_NOMATCHINGNAMEFOUND         ";
00938   case CO_E_LOOKUPACCNAMEFAILED         :
00939     return "CO_E_LOOKUPACCNAMEFAILED         ";
00940   case CO_E_SETSERLHNDLFAILED           :
00941     return "CO_E_SETSERLHNDLFAILED           ";
00942   case CO_E_FAILEDTOGETWINDIR           :
00943     return "CO_E_FAILEDTOGETWINDIR           ";
00944   case CO_E_PATHTOOLONG                 :
00945     return "CO_E_PATHTOOLONG                 ";
00946   case CO_E_FAILEDTOGENUUID             :
00947     return "CO_E_FAILEDTOGENUUID             ";
00948   case CO_E_FAILEDTOCREATEFILE          :
00949     return "CO_E_FAILEDTOCREATEFILE          ";
00950   case CO_E_FAILEDTOCLOSEHANDLE         :
00951     return "CO_E_FAILEDTOCLOSEHANDLE         ";
00952   case CO_E_EXCEEDSYSACLLIMIT           :
00953     return "CO_E_EXCEEDSYSACLLIMIT           ";
00954   case CO_E_ACESINWRONGORDER            :
00955     return "CO_E_ACESINWRONGORDER            ";
00956   case CO_E_INCOMPATIBLESTREAMVERSION   :
00957     return "CO_E_INCOMPATIBLESTREAMVERSION   ";
00958   case CO_E_FAILEDTOOPENPROCESSTOKEN    :
00959     return "CO_E_FAILEDTOOPENPROCESSTOKEN    ";
00960   case CO_E_DECODEFAILED                :
00961     return "CO_E_DECODEFAILED                ";
00962   case CO_E_ACNOTINITIALIZED            :
00963     return "CO_E_ACNOTINITIALIZED            ";
00964   case OLE_S_USEREG                     :
00965     return "OLE_S_USEREG                     ";
00966   case OLE_S_STATIC                     :
00967     return "OLE_S_STATIC                     ";
00968   case OLE_S_MAC_CLIPFORMAT             :
00969     return "OLE_S_MAC_CLIPFORMAT             ";
00970   case DRAGDROP_S_DROP                  :
00971     return "DRAGDROP_S_DROP                  ";
00972   case DRAGDROP_S_CANCEL                :
00973     return "DRAGDROP_S_CANCEL                ";
00974   case DRAGDROP_S_USEDEFAULTCURSORS     :
00975     return "DRAGDROP_S_USEDEFAULTCURSORS     ";
00976   case DATA_S_SAMEFORMATETC             :
00977     return "DATA_S_SAMEFORMATETC             ";
00978   case VIEW_S_ALREADY_FROZEN            :
00979     return "VIEW_S_ALREADY_FROZEN            ";
00980   case CACHE_S_FORMATETC_NOTSUPPORTED   :
00981     return "CACHE_S_FORMATETC_NOTSUPPORTED   ";
00982   case CACHE_S_SAMECACHE                :
00983     return "CACHE_S_SAMECACHE                ";
00984   case CACHE_S_SOMECACHES_NOTUPDATED    :
00985     return "CACHE_S_SOMECACHES_NOTUPDATED    ";
00986   case OLEOBJ_S_INVALIDVERB             :
00987     return "OLEOBJ_S_INVALIDVERB             ";
00988   case OLEOBJ_S_CANNOT_DOVERB_NOW       :
00989     return "OLEOBJ_S_CANNOT_DOVERB_NOW       ";
00990   case OLEOBJ_S_INVALIDHWND             :
00991     return "OLEOBJ_S_INVALIDHWND             ";
00992   case INPLACE_S_TRUNCATED              :
00993     return "INPLACE_S_TRUNCATED              ";
00994   case CONVERT10_S_NO_PRESENTATION      :
00995     return "CONVERT10_S_NO_PRESENTATION      ";
00996   case MK_S_REDUCED_TO_SELF             :
00997     return "MK_S_REDUCED_TO_SELF             ";
00998   case MK_S_ME                          :
00999     return "MK_S_ME                          ";
01000   case MK_S_HIM                         :
01001     return "MK_S_HIM                         ";
01002   case MK_S_US                          :
01003     return "MK_S_US                          ";
01004   case MK_S_MONIKERALREADYREGISTERED    :
01005     return "MK_S_MONIKERALREADYREGISTERED    ";
01006   case CO_E_CLASS_CREATE_FAILED         :
01007     return "CO_E_CLASS_CREATE_FAILED         ";
01008   case CO_E_SCM_ERROR                   :
01009     return "CO_E_SCM_ERROR                   ";
01010   case CO_E_SCM_RPC_FAILURE             :
01011     return "CO_E_SCM_RPC_FAILURE             ";
01012   case CO_E_BAD_PATH                    :
01013     return "CO_E_BAD_PATH                    ";
01014   case CO_E_SERVER_EXEC_FAILURE         :
01015     return "CO_E_SERVER_EXEC_FAILURE         ";
01016   case CO_E_OBJSRV_RPC_FAILURE          :
01017     return "CO_E_OBJSRV_RPC_FAILURE          ";
01018   case MK_E_NO_NORMALIZED               :
01019     return "MK_E_NO_NORMALIZED               ";
01020   case CO_E_SERVER_STOPPING             :
01021     return "CO_E_SERVER_STOPPING             ";
01022   case MEM_E_INVALID_ROOT               :
01023     return "MEM_E_INVALID_ROOT               ";
01024   case MEM_E_INVALID_LINK               :
01025     return "MEM_E_INVALID_LINK               ";
01026   case MEM_E_INVALID_SIZE               :
01027     return "MEM_E_INVALID_SIZE               ";
01028   case CO_S_NOTALLINTERFACES            :
01029     return "CO_S_NOTALLINTERFACES            ";
01030   case DISP_E_UNKNOWNINTERFACE          :
01031     return "DISP_E_UNKNOWNINTERFACE          ";
01032   case DISP_E_MEMBERNOTFOUND            :
01033     return "DISP_E_MEMBERNOTFOUND            ";
01034   case DISP_E_PARAMNOTFOUND             :
01035     return "DISP_E_PARAMNOTFOUND             ";
01036   case DISP_E_TYPEMISMATCH              :
01037     return "DISP_E_TYPEMISMATCH              ";
01038   case DISP_E_UNKNOWNNAME               :
01039     return "DISP_E_UNKNOWNNAME               ";
01040   case DISP_E_NONAMEDARGS               :
01041     return "DISP_E_NONAMEDARGS               ";
01042   case DISP_E_BADVARTYPE                :
01043     return "DISP_E_BADVARTYPE                ";
01044   case DISP_E_EXCEPTION                 :
01045     return "DISP_E_EXCEPTION                 ";
01046   case DISP_E_OVERFLOW                  :
01047     return "DISP_E_OVERFLOW                  ";
01048   case DISP_E_BADINDEX                  :
01049     return "DISP_E_BADINDEX                  ";
01050   case DISP_E_UNKNOWNLCID               :
01051     return "DISP_E_UNKNOWNLCID               ";
01052   case DISP_E_ARRAYISLOCKED             :
01053     return "DISP_E_ARRAYISLOCKED             ";
01054   case DISP_E_BADPARAMCOUNT             :
01055     return "DISP_E_BADPARAMCOUNT             ";
01056   case DISP_E_PARAMNOTOPTIONAL          :
01057     return "DISP_E_PARAMNOTOPTIONAL          ";
01058   case DISP_E_BADCALLEE                 :
01059     return "DISP_E_BADCALLEE                 ";
01060   case DISP_E_NOTACOLLECTION            :
01061     return "DISP_E_NOTACOLLECTION            ";
01062   case DISP_E_DIVBYZERO                 :
01063     return "DISP_E_DIVBYZERO                 ";
01064   case TYPE_E_BUFFERTOOSMALL            :
01065     return "TYPE_E_BUFFERTOOSMALL            ";
01066   case TYPE_E_FIELDNOTFOUND             :
01067     return "TYPE_E_FIELDNOTFOUND             ";
01068   case TYPE_E_INVDATAREAD               :
01069     return "TYPE_E_INVDATAREAD               ";
01070   case TYPE_E_UNSUPFORMAT               :
01071     return "TYPE_E_UNSUPFORMAT               ";
01072   case TYPE_E_REGISTRYACCESS            :
01073     return "TYPE_E_REGISTRYACCESS            ";
01074   case TYPE_E_LIBNOTREGISTERED          :
01075     return "TYPE_E_LIBNOTREGISTERED          ";
01076   case TYPE_E_UNDEFINEDTYPE             :
01077     return "TYPE_E_UNDEFINEDTYPE             ";
01078   case TYPE_E_QUALIFIEDNAMEDISALLOWED   :
01079     return "TYPE_E_QUALIFIEDNAMEDISALLOWED   ";
01080   case TYPE_E_INVALIDSTATE              :
01081     return "TYPE_E_INVALIDSTATE              ";
01082   case TYPE_E_WRONGTYPEKIND             :
01083     return "TYPE_E_WRONGTYPEKIND             ";
01084   case TYPE_E_ELEMENTNOTFOUND           :
01085     return "TYPE_E_ELEMENTNOTFOUND           ";
01086   case TYPE_E_AMBIGUOUSNAME             :
01087     return "TYPE_E_AMBIGUOUSNAME             ";
01088   case TYPE_E_NAMECONFLICT              :
01089     return "TYPE_E_NAMECONFLICT              ";
01090   case TYPE_E_UNKNOWNLCID               :
01091     return "TYPE_E_UNKNOWNLCID               ";
01092   case TYPE_E_DLLFUNCTIONNOTFOUND       :
01093     return "TYPE_E_DLLFUNCTIONNOTFOUND       ";
01094   case TYPE_E_BADMODULEKIND             :
01095     return "TYPE_E_BADMODULEKIND             ";
01096   case TYPE_E_SIZETOOBIG                :
01097     return "TYPE_E_SIZETOOBIG                ";
01098   case TYPE_E_DUPLICATEID               :
01099     return "TYPE_E_DUPLICATEID               ";
01100   case TYPE_E_INVALIDID                 :
01101     return "TYPE_E_INVALIDID                 ";
01102   case TYPE_E_TYPEMISMATCH              :
01103     return "TYPE_E_TYPEMISMATCH              ";
01104   case TYPE_E_OUTOFBOUNDS               :
01105     return "TYPE_E_OUTOFBOUNDS               ";
01106   case TYPE_E_IOERROR                   :
01107     return "TYPE_E_IOERROR                   ";
01108   case TYPE_E_CANTCREATETMPFILE         :
01109     return "TYPE_E_CANTCREATETMPFILE         ";
01110   case TYPE_E_CANTLOADLIBRARY           :
01111     return "TYPE_E_CANTLOADLIBRARY           ";
01112   case TYPE_E_INCONSISTENTPROPFUNCS     :
01113     return "TYPE_E_INCONSISTENTPROPFUNCS     ";
01114   case TYPE_E_CIRCULARTYPE              :
01115     return "TYPE_E_CIRCULARTYPE              ";
01116   case STG_E_INVALIDFUNCTION            :
01117     return "STG_E_INVALIDFUNCTION            ";
01118   case STG_E_FILENOTFOUND               :
01119     return "STG_E_FILENOTFOUND               ";
01120   case STG_E_PATHNOTFOUND               :
01121     return "STG_E_PATHNOTFOUND               ";
01122   case STG_E_TOOMANYOPENFILES           :
01123     return "STG_E_TOOMANYOPENFILES           ";
01124   case STG_E_ACCESSDENIED               :
01125     return "STG_E_ACCESSDENIED               ";
01126   case STG_E_INVALIDHANDLE              :
01127     return "STG_E_INVALIDHANDLE              ";
01128   case STG_E_INSUFFICIENTMEMORY         :
01129     return "STG_E_INSUFFICIENTMEMORY         ";
01130   case STG_E_INVALIDPOINTER             :
01131     return "STG_E_INVALIDPOINTER             ";
01132   case STG_E_NOMOREFILES                :
01133     return "STG_E_NOMOREFILES                ";
01134   case STG_E_DISKISWRITEPROTECTED       :
01135     return "STG_E_DISKISWRITEPROTECTED       ";
01136   case STG_E_SEEKERROR                  :
01137     return "STG_E_SEEKERROR                  ";
01138   case STG_E_WRITEFAULT                 :
01139     return "STG_E_WRITEFAULT                 ";
01140   case STG_E_READFAULT                  :
01141     return "STG_E_READFAULT                  ";
01142   case STG_E_SHAREVIOLATION             :
01143     return "STG_E_SHAREVIOLATION             ";
01144   case STG_E_LOCKVIOLATION              :
01145     return "STG_E_LOCKVIOLATION              ";
01146   case STG_E_FILEALREADYEXISTS          :
01147     return "STG_E_FILEALREADYEXISTS          ";
01148   case STG_E_INVALIDPARAMETER           :
01149     return "STG_E_INVALIDPARAMETER           ";
01150   case STG_E_MEDIUMFULL                 :
01151     return "STG_E_MEDIUMFULL                 ";
01152   case STG_E_PROPSETMISMATCHED          :
01153     return "STG_E_PROPSETMISMATCHED          ";
01154   case STG_E_ABNORMALAPIEXIT            :
01155     return "STG_E_ABNORMALAPIEXIT            ";
01156   case STG_E_INVALIDHEADER              :
01157     return "STG_E_INVALIDHEADER              ";
01158   case STG_E_INVALIDNAME                :
01159     return "STG_E_INVALIDNAME                ";
01160   case STG_E_UNKNOWN                    :
01161     return "STG_E_UNKNOWN                    ";
01162   case STG_E_UNIMPLEMENTEDFUNCTION      :
01163     return "STG_E_UNIMPLEMENTEDFUNCTION      ";
01164   case STG_E_INVALIDFLAG                :
01165     return "STG_E_INVALIDFLAG                ";
01166   case STG_E_INUSE                      :
01167     return "STG_E_INUSE                      ";
01168   case STG_E_NOTCURRENT                 :
01169     return "STG_E_NOTCURRENT                 ";
01170   case STG_E_REVERTED                   :
01171     return "STG_E_REVERTED                   ";
01172   case STG_E_CANTSAVE                   :
01173     return "STG_E_CANTSAVE                   ";
01174   case STG_E_OLDFORMAT                  :
01175     return "STG_E_OLDFORMAT                  ";
01176   case STG_E_OLDDLL                     :
01177     return "STG_E_OLDDLL                     ";
01178   case STG_E_SHAREREQUIRED              :
01179     return "STG_E_SHAREREQUIRED              ";
01180   case STG_E_NOTFILEBASEDSTORAGE        :
01181     return "STG_E_NOTFILEBASEDSTORAGE        ";
01182   case STG_E_EXTANTMARSHALLINGS         :
01183     return "STG_E_EXTANTMARSHALLINGS         ";
01184   case STG_E_DOCFILECORRUPT             :
01185     return "STG_E_DOCFILECORRUPT             ";
01186   case STG_E_BADBASEADDRESS             :
01187     return "STG_E_BADBASEADDRESS             ";
01188   case STG_E_INCOMPLETE                 :
01189     return "STG_E_INCOMPLETE                 ";
01190   case STG_E_TERMINATED                 :
01191     return "STG_E_TERMINATED                 ";
01192   case STG_S_CONVERTED                  :
01193     return "STG_S_CONVERTED                  ";
01194   case STG_S_BLOCK                      :
01195     return "STG_S_BLOCK                      ";
01196   case STG_S_RETRYNOW                   :
01197     return "STG_S_RETRYNOW                   ";
01198   case STG_S_MONITORING                 :
01199     return "STG_S_MONITORING                 ";
01200   case STG_S_MULTIPLEOPENS              :
01201     return "STG_S_MULTIPLEOPENS              ";
01202   case STG_S_CONSOLIDATIONFAILED        :
01203     return "STG_S_CONSOLIDATIONFAILED        ";
01204   case STG_S_CANNOTCONSOLIDATE          :
01205     return "STG_S_CANNOTCONSOLIDATE          ";
01206   case RPC_E_CALL_REJECTED              :
01207     return "RPC_E_CALL_REJECTED              ";
01208   case RPC_E_CALL_CANCELED              :
01209     return "RPC_E_CALL_CANCELED              ";
01210   case RPC_E_CANTPOST_INSENDCALL        :
01211     return "RPC_E_CANTPOST_INSENDCALL        ";
01212   case RPC_E_CANTCALLOUT_INASYNCCALL    :
01213     return "RPC_E_CANTCALLOUT_INASYNCCALL    ";
01214   case RPC_E_CANTCALLOUT_INEXTERNALCALL :
01215     return "RPC_E_CANTCALLOUT_INEXTERNALCALL ";
01216   case RPC_E_CONNECTION_TERMINATED      :
01217     return "RPC_E_CONNECTION_TERMINATED      ";
01218   case RPC_E_SERVER_DIED                :
01219     return "RPC_E_SERVER_DIED                ";
01220   case RPC_E_CLIENT_DIED                :
01221     return "RPC_E_CLIENT_DIED                ";
01222   case RPC_E_INVALID_DATAPACKET         :
01223     return "RPC_E_INVALID_DATAPACKET         ";
01224   case RPC_E_CANTTRANSMIT_CALL          :
01225     return "RPC_E_CANTTRANSMIT_CALL          ";
01226   case RPC_E_CLIENT_CANTMARSHAL_DATA    :
01227     return "RPC_E_CLIENT_CANTMARSHAL_DATA    ";
01228   case RPC_E_CLIENT_CANTUNMARSHAL_DATA  :
01229     return "RPC_E_CLIENT_CANTUNMARSHAL_DATA  ";
01230   case RPC_E_SERVER_CANTMARSHAL_DATA    :
01231     return "RPC_E_SERVER_CANTMARSHAL_DATA    ";
01232   case RPC_E_SERVER_CANTUNMARSHAL_DATA  :
01233     return "RPC_E_SERVER_CANTUNMARSHAL_DATA  ";
01234   case RPC_E_INVALID_DATA               :
01235     return "RPC_E_INVALID_DATA               ";
01236   case RPC_E_INVALID_PARAMETER          :
01237     return "RPC_E_INVALID_PARAMETER          ";
01238   case RPC_E_CANTCALLOUT_AGAIN          :
01239     return "RPC_E_CANTCALLOUT_AGAIN          ";
01240   case RPC_E_SERVER_DIED_DNE            :
01241     return "RPC_E_SERVER_DIED_DNE            ";
01242   case RPC_E_SYS_CALL_FAILED            :
01243     return "RPC_E_SYS_CALL_FAILED            ";
01244   case RPC_E_OUT_OF_RESOURCES           :
01245     return "RPC_E_OUT_OF_RESOURCES           ";
01246   case RPC_E_ATTEMPTED_MULTITHREAD      :
01247     return "RPC_E_ATTEMPTED_MULTITHREAD      ";
01248   case RPC_E_NOT_REGISTERED             :
01249     return "RPC_E_NOT_REGISTERED             ";
01250   case RPC_E_FAULT                      :
01251     return "RPC_E_FAULT                      ";
01252   case RPC_E_SERVERFAULT                :
01253     return "RPC_E_SERVERFAULT                ";
01254   case RPC_E_CHANGED_MODE               :
01255     return "RPC_E_CHANGED_MODE               ";
01256   case RPC_E_INVALIDMETHOD              :
01257     return "RPC_E_INVALIDMETHOD              ";
01258   case RPC_E_DISCONNECTED               :
01259     return "RPC_E_DISCONNECTED               ";
01260   case RPC_E_RETRY                      :
01261     return "RPC_E_RETRY                      ";
01262   case RPC_E_SERVERCALL_RETRYLATER      :
01263     return "RPC_E_SERVERCALL_RETRYLATER      ";
01264   case RPC_E_SERVERCALL_REJECTED        :
01265     return "RPC_E_SERVERCALL_REJECTED        ";
01266   case RPC_E_INVALID_CALLDATA           :
01267     return "RPC_E_INVALID_CALLDATA           ";
01268   case RPC_E_CANTCALLOUT_ININPUTSYNCCALL :
01269     return "RPC_E_CANTCALLOUT_ININPUTSYNCCALL ";
01270   case RPC_E_WRONG_THREAD               :
01271     return "RPC_E_WRONG_THREAD               ";
01272   case RPC_E_THREAD_NOT_INIT            :
01273     return "RPC_E_THREAD_NOT_INIT            ";
01274   case RPC_E_VERSION_MISMATCH           :
01275     return "RPC_E_VERSION_MISMATCH           ";
01276   case RPC_E_INVALID_HEADER             :
01277     return "RPC_E_INVALID_HEADER             ";
01278   case RPC_E_INVALID_EXTENSION          :
01279     return "RPC_E_INVALID_EXTENSION          ";
01280   case RPC_E_INVALID_IPID               :
01281     return "RPC_E_INVALID_IPID               ";
01282   case RPC_E_INVALID_OBJECT             :
01283     return "RPC_E_INVALID_OBJECT             ";
01284   case RPC_S_CALLPENDING                :
01285     return "RPC_S_CALLPENDING                ";
01286   case RPC_S_WAITONTIMER                :
01287     return "RPC_S_WAITONTIMER                ";
01288   case RPC_E_CALL_COMPLETE              :
01289     return "RPC_E_CALL_COMPLETE              ";
01290   case RPC_E_UNSECURE_CALL              :
01291     return "RPC_E_UNSECURE_CALL              ";
01292   case RPC_E_TOO_LATE                   :
01293     return "RPC_E_TOO_LATE                   ";
01294   case RPC_E_NO_GOOD_SECURITY_PACKAGES  :
01295     return "RPC_E_NO_GOOD_SECURITY_PACKAGES  ";
01296   case RPC_E_ACCESS_DENIED              :
01297     return "RPC_E_ACCESS_DENIED              ";
01298   case RPC_E_REMOTE_DISABLED            :
01299     return "RPC_E_REMOTE_DISABLED            ";
01300   case RPC_E_INVALID_OBJREF             :
01301     return "RPC_E_INVALID_OBJREF             ";
01302   case RPC_E_NO_CONTEXT                 :
01303     return "RPC_E_NO_CONTEXT                 ";
01304   case RPC_E_TIMEOUT                    :
01305     return "RPC_E_TIMEOUT                    ";
01306   case RPC_E_NO_SYNC                    :
01307     return "RPC_E_NO_SYNC                    ";
01308   case RPC_E_UNEXPECTED                 :
01309     return "RPC_E_UNEXPECTED                 ";
01310   case NTE_BAD_UID                      :
01311     return "NTE_BAD_UID                      ";
01312   case NTE_BAD_HASH                     :
01313     return "NTE_BAD_HASH                     ";
01314     //case NTE_BAD_HASH                     :
01315     //return "NTE_BAD_HASH                     ";
01316   case NTE_BAD_KEY                      :
01317     return "NTE_BAD_KEY                      ";
01318   case NTE_BAD_LEN                      :
01319     return "NTE_BAD_LEN                      ";
01320   case NTE_BAD_DATA                     :
01321     return "NTE_BAD_DATA                     ";
01322   case NTE_BAD_SIGNATURE                :
01323     return "NTE_BAD_SIGNATURE                ";
01324   case NTE_BAD_VER                      :
01325     return "NTE_BAD_VER                      ";
01326   case NTE_BAD_ALGID                    :
01327     return "NTE_BAD_ALGID                    ";
01328   case NTE_BAD_FLAGS                    :
01329     return "NTE_BAD_FLAGS                    ";
01330   case NTE_BAD_TYPE                     :
01331     return "NTE_BAD_TYPE                     ";
01332   case NTE_BAD_KEY_STATE                :
01333     return "NTE_BAD_KEY_STATE                ";
01334   case NTE_BAD_HASH_STATE               :
01335     return "NTE_BAD_HASH_STATE               ";
01336   case NTE_NO_KEY                       :
01337     return "NTE_NO_KEY                       ";
01338   case NTE_NO_MEMORY                    :
01339     return "NTE_NO_MEMORY                    ";
01340   case NTE_EXISTS                       :
01341     return "NTE_EXISTS                       ";
01342   case NTE_PERM                         :
01343     return "NTE_PERM                         ";
01344   case NTE_NOT_FOUND                    :
01345     return "NTE_NOT_FOUND                    ";
01346   case NTE_DOUBLE_ENCRYPT               :
01347     return "NTE_DOUBLE_ENCRYPT               ";
01348   case NTE_BAD_PROVIDER                 :
01349     return "NTE_BAD_PROVIDER                 ";
01350   case NTE_BAD_PROV_TYPE                :
01351     return "NTE_BAD_PROV_TYPE                ";
01352   case NTE_BAD_PUBLIC_KEY               :
01353     return "NTE_BAD_PUBLIC_KEY               ";
01354   case NTE_BAD_KEYSET                   :
01355     return "NTE_BAD_KEYSET                   ";
01356   case NTE_PROV_TYPE_NOT_DEF            :
01357     return "NTE_PROV_TYPE_NOT_DEF            ";
01358   case NTE_PROV_TYPE_ENTRY_BAD          :
01359     return "NTE_PROV_TYPE_ENTRY_BAD          ";
01360   case NTE_KEYSET_NOT_DEF               :
01361     return "NTE_KEYSET_NOT_DEF               ";
01362   case NTE_KEYSET_ENTRY_BAD             :
01363     return "NTE_KEYSET_ENTRY_BAD             ";
01364   case NTE_PROV_TYPE_NO_MATCH           :
01365     return "NTE_PROV_TYPE_NO_MATCH           ";
01366   case NTE_SIGNATURE_FILE_BAD           :
01367     return "NTE_SIGNATURE_FILE_BAD           ";
01368   case NTE_PROVIDER_DLL_FAIL            :
01369     return "NTE_PROVIDER_DLL_FAIL            ";
01370   case NTE_PROV_DLL_NOT_FOUND           :
01371     return "NTE_PROV_DLL_NOT_FOUND           ";
01372   case NTE_BAD_KEYSET_PARAM             :
01373     return "NTE_BAD_KEYSET_PARAM             ";
01374   case NTE_FAIL                         :
01375     return "NTE_FAIL                         ";
01376   case NTE_SYS_ERR                      :
01377     return "NTE_SYS_ERR                      ";
01378   case CRYPT_E_MSG_ERROR                :
01379     return "CRYPT_E_MSG_ERROR                ";
01380   case CRYPT_E_UNKNOWN_ALGO             :
01381     return "CRYPT_E_UNKNOWN_ALGO             ";
01382   case CRYPT_E_OID_FORMAT               :
01383     return "CRYPT_E_OID_FORMAT               ";
01384   case CRYPT_E_INVALID_MSG_TYPE         :
01385     return "CRYPT_E_INVALID_MSG_TYPE         ";
01386   case CRYPT_E_UNEXPECTED_ENCODING      :
01387     return "CRYPT_E_UNEXPECTED_ENCODING      ";
01388   case CRYPT_E_AUTH_ATTR_MISSING        :
01389     return "CRYPT_E_AUTH_ATTR_MISSING        ";
01390   case CRYPT_E_HASH_VALUE               :
01391     return "CRYPT_E_HASH_VALUE               ";
01392   case CRYPT_E_INVALID_INDEX            :
01393     return "CRYPT_E_INVALID_INDEX            ";
01394   case CRYPT_E_ALREADY_DECRYPTED        :
01395     return "CRYPT_E_ALREADY_DECRYPTED        ";
01396   case CRYPT_E_NOT_DECRYPTED            :
01397     return "CRYPT_E_NOT_DECRYPTED            ";
01398   case CRYPT_E_RECIPIENT_NOT_FOUND      :
01399     return "CRYPT_E_RECIPIENT_NOT_FOUND      ";
01400   case CRYPT_E_CONTROL_TYPE             :
01401     return "CRYPT_E_CONTROL_TYPE             ";
01402   case CRYPT_E_ISSUER_SERIALNUMBER      :
01403     return "CRYPT_E_ISSUER_SERIALNUMBER      ";
01404   case CRYPT_E_SIGNER_NOT_FOUND         :
01405     return "CRYPT_E_SIGNER_NOT_FOUND         ";
01406   case CRYPT_E_ATTRIBUTES_MISSING       :
01407     return "CRYPT_E_ATTRIBUTES_MISSING       ";
01408   case CRYPT_E_STREAM_MSG_NOT_READY     :
01409     return "CRYPT_E_STREAM_MSG_NOT_READY     ";
01410   case CRYPT_E_STREAM_INSUFFICIENT_DATA :
01411     return "CRYPT_E_STREAM_INSUFFICIENT_DATA ";
01412   case CRYPT_E_BAD_LEN                  :
01413     return "CRYPT_E_BAD_LEN                  ";
01414   case CRYPT_E_BAD_ENCODE               :
01415     return "CRYPT_E_BAD_ENCODE               ";
01416   case CRYPT_E_FILE_ERROR               :
01417     return "CRYPT_E_FILE_ERROR               ";
01418   case CRYPT_E_NOT_FOUND                :
01419     return "CRYPT_E_NOT_FOUND                ";
01420   case CRYPT_E_EXISTS                   :
01421     return "CRYPT_E_EXISTS                   ";
01422   case CRYPT_E_NO_PROVIDER              :
01423     return "CRYPT_E_NO_PROVIDER              ";
01424   case CRYPT_E_SELF_SIGNED              :
01425     return "CRYPT_E_SELF_SIGNED              ";
01426   case CRYPT_E_DELETED_PREV             :
01427     return "CRYPT_E_DELETED_PREV             ";
01428   case CRYPT_E_NO_MATCH                 :
01429     return "CRYPT_E_NO_MATCH                 ";
01430   case CRYPT_E_UNEXPECTED_MSG_TYPE      :
01431     return "CRYPT_E_UNEXPECTED_MSG_TYPE      ";
01432   case CRYPT_E_NO_KEY_PROPERTY          :
01433     return "CRYPT_E_NO_KEY_PROPERTY          ";
01434   case CRYPT_E_NO_DECRYPT_CERT          :
01435     return "CRYPT_E_NO_DECRYPT_CERT          ";
01436   case CRYPT_E_BAD_MSG                  :
01437     return "CRYPT_E_BAD_MSG                  ";
01438   case CRYPT_E_NO_SIGNER                :
01439     return "CRYPT_E_NO_SIGNER                ";
01440   case CRYPT_E_PENDING_CLOSE            :
01441     return "CRYPT_E_PENDING_CLOSE            ";
01442   case CRYPT_E_REVOKED                  :
01443     return "CRYPT_E_REVOKED                  ";
01444   case CRYPT_E_NO_REVOCATION_DLL        :
01445     return "CRYPT_E_NO_REVOCATION_DLL        ";
01446   case CRYPT_E_NO_REVOCATION_CHECK      :
01447     return "CRYPT_E_NO_REVOCATION_CHECK      ";
01448   case CRYPT_E_REVOCATION_OFFLINE       :
01449     return "CRYPT_E_REVOCATION_OFFLINE       ";
01450   case CRYPT_E_NOT_IN_REVOCATION_DATABASE :
01451     return "CRYPT_E_NOT_IN_REVOCATION_DATABASE ";
01452   case CRYPT_E_INVALID_NUMERIC_STRING   :
01453     return "CRYPT_E_INVALID_NUMERIC_STRING   ";
01454   case CRYPT_E_INVALID_PRINTABLE_STRING :
01455     return "CRYPT_E_INVALID_PRINTABLE_STRING ";
01456   case CRYPT_E_INVALID_IA5_STRING       :
01457     return "CRYPT_E_INVALID_IA5_STRING       ";
01458   case CRYPT_E_INVALID_X500_STRING      :
01459     return "CRYPT_E_INVALID_X500_STRING      ";
01460   case CRYPT_E_NOT_CHAR_STRING          :
01461     return "CRYPT_E_NOT_CHAR_STRING          ";
01462   case CRYPT_E_FILERESIZED              :
01463     return "CRYPT_E_FILERESIZED              ";
01464   case CRYPT_E_SECURITY_SETTINGS        :
01465     return "CRYPT_E_SECURITY_SETTINGS        ";
01466   case CRYPT_E_NO_VERIFY_USAGE_DLL      :
01467     return "CRYPT_E_NO_VERIFY_USAGE_DLL      ";
01468   case CRYPT_E_NO_VERIFY_USAGE_CHECK    :
01469     return "CRYPT_E_NO_VERIFY_USAGE_CHECK    ";
01470   case CRYPT_E_VERIFY_USAGE_OFFLINE     :
01471     return "CRYPT_E_VERIFY_USAGE_OFFLINE     ";
01472   case CRYPT_E_NOT_IN_CTL               :
01473     return "CRYPT_E_NOT_IN_CTL               ";
01474   case CRYPT_E_NO_TRUSTED_SIGNER        :
01475     return "CRYPT_E_NO_TRUSTED_SIGNER        ";
01476   case CRYPT_E_OSS_ERROR                :
01477     return "CRYPT_E_OSS_ERROR                ";
01478   case CERTSRV_E_BAD_REQUESTSUBJECT     :
01479     return "CERTSRV_E_BAD_REQUESTSUBJECT     ";
01480   case CERTSRV_E_NO_REQUEST             :
01481     return "CERTSRV_E_NO_REQUEST             ";
01482   case CERTSRV_E_BAD_REQUESTSTATUS      :
01483     return "CERTSRV_E_BAD_REQUESTSTATUS      ";
01484   case CERTSRV_E_PROPERTY_EMPTY         :
01485     return "CERTSRV_E_PROPERTY_EMPTY         ";
01486     //case CERTDB_E_JET_ERROR               :
01487     //return "CERTDB_E_JET_ERROR               ";
01488   case TRUST_E_SYSTEM_ERROR             :
01489     return "TRUST_E_SYSTEM_ERROR             ";
01490   case TRUST_E_NO_SIGNER_CERT           :
01491     return "TRUST_E_NO_SIGNER_CERT           ";
01492   case TRUST_E_COUNTER_SIGNER           :
01493     return "TRUST_E_COUNTER_SIGNER           ";
01494   case TRUST_E_CERT_SIGNATURE           :
01495     return "TRUST_E_CERT_SIGNATURE           ";
01496   case TRUST_E_TIME_STAMP               :
01497     return "TRUST_E_TIME_STAMP               ";
01498   case TRUST_E_BAD_DIGEST               :
01499     return "TRUST_E_BAD_DIGEST               ";
01500   case TRUST_E_BASIC_CONSTRAINTS        :
01501     return "TRUST_E_BASIC_CONSTRAINTS        ";
01502   case TRUST_E_FINANCIAL_CRITERIA       :
01503     return "TRUST_E_FINANCIAL_CRITERIA       ";
01504   case TRUST_E_PROVIDER_UNKNOWN         :
01505     return "TRUST_E_PROVIDER_UNKNOWN         ";
01506   case TRUST_E_ACTION_UNKNOWN           :
01507     return "TRUST_E_ACTION_UNKNOWN           ";
01508   case TRUST_E_SUBJECT_FORM_UNKNOWN     :
01509     return "TRUST_E_SUBJECT_FORM_UNKNOWN     ";
01510   case TRUST_E_SUBJECT_NOT_TRUSTED      :
01511     return "TRUST_E_SUBJECT_NOT_TRUSTED      ";
01512   case DIGSIG_E_ENCODE                  :
01513     return "DIGSIG_E_ENCODE                  ";
01514   case DIGSIG_E_DECODE                  :
01515     return "DIGSIG_E_DECODE                  ";
01516   case DIGSIG_E_EXTENSIBILITY           :
01517     return "DIGSIG_E_EXTENSIBILITY           ";
01518   case DIGSIG_E_CRYPTO                  :
01519     return "DIGSIG_E_CRYPTO                  ";
01520   case PERSIST_E_SIZEDEFINITE           :
01521     return "PERSIST_E_SIZEDEFINITE           ";
01522   case PERSIST_E_SIZEINDEFINITE         :
01523     return "PERSIST_E_SIZEINDEFINITE         ";
01524   case PERSIST_E_NOTSELFSIZING          :
01525     return "PERSIST_E_NOTSELFSIZING          ";
01526   case TRUST_E_NOSIGNATURE              :
01527     return "TRUST_E_NOSIGNATURE              ";
01528   case CERT_E_EXPIRED                   :
01529     return "CERT_E_EXPIRED                   ";
01530   case CERT_E_VALIDITYPERIODNESTING     :
01531     return "CERT_E_VALIDITYPERIODNESTING     ";
01532   case CERT_E_ROLE                      :
01533     return "CERT_E_ROLE                      ";
01534   case CERT_E_PATHLENCONST              :
01535     return "CERT_E_PATHLENCONST              ";
01536   case CERT_E_CRITICAL                  :
01537     return "CERT_E_CRITICAL                  ";
01538   case CERT_E_PURPOSE                   :
01539     return "CERT_E_PURPOSE                   ";
01540   case CERT_E_ISSUERCHAINING            :
01541     return "CERT_E_ISSUERCHAINING            ";
01542   case CERT_E_MALFORMED                 :
01543     return "CERT_E_MALFORMED                 ";
01544   case CERT_E_UNTRUSTEDROOT             :
01545     return "CERT_E_UNTRUSTEDROOT             ";
01546   case CERT_E_CHAINING                  :
01547     return "CERT_E_CHAINING                  ";
01548   case TRUST_E_FAIL                     :
01549     return "TRUST_E_FAIL                     ";
01550   case CERT_E_REVOKED                   :
01551     return "CERT_E_REVOKED                   ";
01552   case CERT_E_UNTRUSTEDTESTROOT         :
01553     return "CERT_E_UNTRUSTEDTESTROOT         ";
01554   case CERT_E_REVOCATION_FAILURE        :
01555     return "CERT_E_REVOCATION_FAILURE        ";
01556   case CERT_E_CN_NO_MATCH               :
01557     return "CERT_E_CN_NO_MATCH               ";
01558   case CERT_E_WRONG_USAGE               :
01559     return "CERT_E_WRONG_USAGE               ";
01560   case SPAPI_E_EXPECTED_SECTION_NAME    :
01561     return "SPAPI_E_EXPECTED_SECTION_NAME    ";
01562   case SPAPI_E_BAD_SECTION_NAME_LINE    :
01563     return "SPAPI_E_BAD_SECTION_NAME_LINE    ";
01564   case SPAPI_E_SECTION_NAME_TOO_LONG    :
01565     return "SPAPI_E_SECTION_NAME_TOO_LONG    ";
01566   case SPAPI_E_GENERAL_SYNTAX           :
01567     return "SPAPI_E_GENERAL_SYNTAX           ";
01568   case SPAPI_E_WRONG_INF_STYLE          :
01569     return "SPAPI_E_WRONG_INF_STYLE          ";
01570   case SPAPI_E_SECTION_NOT_FOUND        :
01571     return "SPAPI_E_SECTION_NOT_FOUND        ";
01572   case SPAPI_E_LINE_NOT_FOUND           :
01573     return "SPAPI_E_LINE_NOT_FOUND           ";
01574   case SPAPI_E_NO_ASSOCIATED_CLASS      :
01575     return "SPAPI_E_NO_ASSOCIATED_CLASS      ";
01576   case SPAPI_E_CLASS_MISMATCH           :
01577     return "SPAPI_E_CLASS_MISMATCH           ";
01578   case SPAPI_E_DUPLICATE_FOUND          :
01579     return "SPAPI_E_DUPLICATE_FOUND          ";
01580   case SPAPI_E_NO_DRIVER_SELECTED       :
01581     return "SPAPI_E_NO_DRIVER_SELECTED       ";
01582   case SPAPI_E_KEY_DOES_NOT_EXIST       :
01583     return "SPAPI_E_KEY_DOES_NOT_EXIST       ";
01584   case SPAPI_E_INVALID_DEVINST_NAME     :
01585     return "SPAPI_E_INVALID_DEVINST_NAME     ";
01586   case SPAPI_E_INVALID_CLASS            :
01587     return "SPAPI_E_INVALID_CLASS            ";
01588   case SPAPI_E_DEVINST_ALREADY_EXISTS   :
01589     return "SPAPI_E_DEVINST_ALREADY_EXISTS   ";
01590   case SPAPI_E_DEVINFO_NOT_REGISTERED   :
01591     return "SPAPI_E_DEVINFO_NOT_REGISTERED   ";
01592   case SPAPI_E_INVALID_REG_PROPERTY     :
01593     return "SPAPI_E_INVALID_REG_PROPERTY     ";
01594   case SPAPI_E_NO_INF                   :
01595     return "SPAPI_E_NO_INF                   ";
01596   case SPAPI_E_NO_SUCH_DEVINST          :
01597     return "SPAPI_E_NO_SUCH_DEVINST          ";
01598   case SPAPI_E_CANT_LOAD_CLASS_ICON     :
01599     return "SPAPI_E_CANT_LOAD_CLASS_ICON     ";
01600   case SPAPI_E_INVALID_CLASS_INSTALLER  :
01601     return "SPAPI_E_INVALID_CLASS_INSTALLER  ";
01602   case SPAPI_E_DI_DO_DEFAULT            :
01603     return "SPAPI_E_DI_DO_DEFAULT            ";
01604   case SPAPI_E_DI_NOFILECOPY            :
01605     return "SPAPI_E_DI_NOFILECOPY            ";
01606   case SPAPI_E_INVALID_HWPROFILE        :
01607     return "SPAPI_E_INVALID_HWPROFILE        ";
01608   case SPAPI_E_NO_DEVICE_SELECTED       :
01609     return "SPAPI_E_NO_DEVICE_SELECTED       ";
01610   case SPAPI_E_DEVINFO_LIST_LOCKED      :
01611     return "SPAPI_E_DEVINFO_LIST_LOCKED      ";
01612   case SPAPI_E_DEVINFO_DATA_LOCKED      :
01613     return "SPAPI_E_DEVINFO_DATA_LOCKED      ";
01614   case SPAPI_E_DI_BAD_PATH              :
01615     return "SPAPI_E_DI_BAD_PATH              ";
01616   case SPAPI_E_NO_CLASSINSTALL_PARAMS   :
01617     return "SPAPI_E_NO_CLASSINSTALL_PARAMS   ";
01618   case SPAPI_E_FILEQUEUE_LOCKED         :
01619     return "SPAPI_E_FILEQUEUE_LOCKED         ";
01620   case SPAPI_E_BAD_SERVICE_INSTALLSECT  :
01621     return "SPAPI_E_BAD_SERVICE_INSTALLSECT  ";
01622   case SPAPI_E_NO_CLASS_DRIVER_LIST     :
01623     return "SPAPI_E_NO_CLASS_DRIVER_LIST     ";
01624   case SPAPI_E_NO_ASSOCIATED_SERVICE    :
01625     return "SPAPI_E_NO_ASSOCIATED_SERVICE    ";
01626   case SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE :
01627     return "SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE ";
01628   case SPAPI_E_DEVICE_INTERFACE_ACTIVE  :
01629     return "SPAPI_E_DEVICE_INTERFACE_ACTIVE  ";
01630   case SPAPI_E_DEVICE_INTERFACE_REMOVED :
01631     return "SPAPI_E_DEVICE_INTERFACE_REMOVED ";
01632   case SPAPI_E_BAD_INTERFACE_INSTALLSECT :
01633     return "SPAPI_E_BAD_INTERFACE_INSTALLSECT ";
01634   case SPAPI_E_NO_SUCH_INTERFACE_CLASS  :
01635     return "SPAPI_E_NO_SUCH_INTERFACE_CLASS  ";
01636   case SPAPI_E_INVALID_REFERENCE_STRING :
01637     return "SPAPI_E_INVALID_REFERENCE_STRING ";
01638   case SPAPI_E_INVALID_MACHINENAME      :
01639     return "SPAPI_E_INVALID_MACHINENAME      ";
01640   case SPAPI_E_REMOTE_COMM_FAILURE      :
01641     return "SPAPI_E_REMOTE_COMM_FAILURE      ";
01642   case SPAPI_E_MACHINE_UNAVAILABLE      :
01643     return "SPAPI_E_MACHINE_UNAVAILABLE      ";
01644   case SPAPI_E_NO_CONFIGMGR_SERVICES    :
01645     return "SPAPI_E_NO_CONFIGMGR_SERVICES    ";
01646   case SPAPI_E_INVALID_PROPPAGE_PROVIDER :
01647     return "SPAPI_E_INVALID_PROPPAGE_PROVIDER ";
01648   case SPAPI_E_NO_SUCH_DEVICE_INTERFACE :
01649     return "SPAPI_E_NO_SUCH_DEVICE_INTERFACE ";
01650   case SPAPI_E_DI_POSTPROCESSING_REQUIRED :
01651     return "SPAPI_E_DI_POSTPROCESSING_REQUIRED ";
01652   case SPAPI_E_INVALID_COINSTALLER      :
01653     return "SPAPI_E_INVALID_COINSTALLER      ";
01654   case SPAPI_E_NO_COMPAT_DRIVERS        :
01655     return "SPAPI_E_NO_COMPAT_DRIVERS        ";
01656   case SPAPI_E_NO_DEVICE_ICON           :
01657     return "SPAPI_E_NO_DEVICE_ICON           ";
01658   case SPAPI_E_INVALID_INF_LOGCONFIG    :
01659     return "SPAPI_E_INVALID_INF_LOGCONFIG    ";
01660   case SPAPI_E_DI_DONT_INSTALL          :
01661     return "SPAPI_E_DI_DONT_INSTALL          ";
01662   case SPAPI_E_INVALID_FILTER_DRIVER    :
01663     return "SPAPI_E_INVALID_FILTER_DRIVER    ";
01664   case SPAPI_E_ERROR_NOT_INSTALLED      :
01665     return "SPAPI_E_ERROR_NOT_INSTALLED      ";
01666 
01667   default:
01668     static char buff[1000];
01669     sprintf(buff, "Unrecognized error value: %08X\0", error);
01670 
01671     return buff;
01672   }
01673 }

Generated on Fri May 2 00:44:45 2003 for Panda by doxygen1.3