ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

client.c
Go to the documentation of this file.
00001 /*
00002  * Copyright 2005 Jacek Caban for CodeWeavers
00003  *
00004  * This library is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU Lesser General Public
00006  * License as published by the Free Software Foundation; either
00007  * version 2.1 of the License, or (at your option) any later version.
00008  *
00009  * This library is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012  * Lesser General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU Lesser General Public
00015  * License along with this library; if not, write to the Free Software
00016  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00017  */
00018 
00019 #include <stdio.h>
00020 
00021 #include "wine/debug.h"
00022 #include "shdocvw.h"
00023 #include "mshtmdid.h"
00024 #include "idispids.h"
00025 
00026 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
00027 
00028 #define CLIENTSITE_THIS(iface) DEFINE_THIS(DocHost, OleClientSite, iface)
00029 
00030 static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv)
00031 {
00032     DocHost *This = CLIENTSITE_THIS(iface);
00033 
00034     *ppv = NULL;
00035 
00036     if(IsEqualGUID(&IID_IUnknown, riid)) {
00037         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
00038         *ppv = CLIENTSITE(This);
00039     }else if(IsEqualGUID(&IID_IOleClientSite, riid)) {
00040         TRACE("(%p)->(IID_IOleClientSite %p)\n", This, ppv);
00041         *ppv = CLIENTSITE(This);
00042     }else if(IsEqualGUID(&IID_IOleWindow, riid)) {
00043         TRACE("(%p)->(IID_IOleWindow %p)\n", This, ppv);
00044         *ppv = INPLACESITE(This);
00045     }else if(IsEqualGUID(&IID_IOleInPlaceSite, riid)) {
00046         TRACE("(%p)->(IID_IOleInPlaceSite %p)\n", This, ppv);
00047         *ppv = INPLACESITE(This);
00048     }else if(IsEqualGUID(&IID_IDocHostUIHandler, riid)) {
00049         TRACE("(%p)->(IID_IDocHostUIHandler %p)\n", This, ppv);
00050         *ppv = DOCHOSTUI(This);
00051     }else if(IsEqualGUID(&IID_IDocHostUIHandler2, riid)) {
00052         TRACE("(%p)->(IID_IDocHostUIHandler2 %p)\n", This, ppv);
00053         *ppv = DOCHOSTUI2(This);
00054     }else if(IsEqualGUID(&IID_IOleDocumentSite, riid)) {
00055         TRACE("(%p)->(IID_IOleDocumentSite %p)\n", This, ppv);
00056         *ppv = DOCSITE(This);
00057     }else if(IsEqualGUID(&IID_IOleCommandTarget, riid)) {
00058         TRACE("(%p)->(IID_IOleCommandTarget %p)\n", This, ppv);
00059         *ppv = OLECMD(This);
00060     }else if(IsEqualGUID(&IID_IDispatch, riid)) {
00061         TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
00062         *ppv = CLDISP(This);
00063     }else if(IsEqualGUID(&IID_IPropertyNotifySink, riid)) {
00064         TRACE("(%p)->(IID_IPropertyNotifySink %p)\n", This, ppv);
00065         *ppv = PROPNOTIF(This);
00066     }else if(IsEqualGUID(&IID_IServiceProvider, riid)) {
00067         TRACE("(%p)->(IID_IServiceProvider %p)\n", This, ppv);
00068         *ppv = SERVPROV(This);
00069     }
00070 
00071     if(*ppv) {
00072         IOleClientSite_AddRef(CLIENTSITE(This));
00073         return S_OK;
00074     }
00075 
00076     WARN("Unsupported interface %s\n", debugstr_guid(riid));
00077 
00078     return E_NOINTERFACE;
00079 }
00080 
00081 static ULONG WINAPI ClientSite_AddRef(IOleClientSite *iface)
00082 {
00083     DocHost *This = CLIENTSITE_THIS(iface);
00084     return IDispatch_AddRef(This->disp);
00085 }
00086 
00087 static ULONG WINAPI ClientSite_Release(IOleClientSite *iface)
00088 {
00089     DocHost *This = CLIENTSITE_THIS(iface);
00090     return IDispatch_Release(This->disp);
00091 }
00092 
00093 static HRESULT WINAPI ClientSite_SaveObject(IOleClientSite *iface)
00094 {
00095     DocHost *This = CLIENTSITE_THIS(iface);
00096     FIXME("(%p)\n", This);
00097     return E_NOTIMPL;
00098 }
00099 
00100 static HRESULT WINAPI ClientSite_GetMoniker(IOleClientSite *iface, DWORD dwAssign,
00101                                             DWORD dwWhichMoniker, IMoniker **ppmk)
00102 {
00103     DocHost *This = CLIENTSITE_THIS(iface);
00104     FIXME("(%p)->(%d %d %p)\n", This, dwAssign, dwWhichMoniker, ppmk);
00105     return E_NOTIMPL;
00106 }
00107 
00108 static HRESULT WINAPI ClientSite_GetContainer(IOleClientSite *iface, IOleContainer **ppContainer)
00109 {
00110     DocHost *This = CLIENTSITE_THIS(iface);
00111     FIXME("(%p)->(%p)\n", This, ppContainer);
00112     return E_NOTIMPL;
00113 }
00114 
00115 static HRESULT WINAPI ClientSite_ShowObject(IOleClientSite *iface)
00116 {
00117     DocHost *This = CLIENTSITE_THIS(iface);
00118     FIXME("(%p)\n", This);
00119     return E_NOTIMPL;
00120 }
00121 
00122 static HRESULT WINAPI ClientSite_OnShowWindow(IOleClientSite *iface, BOOL fShow)
00123 {
00124     DocHost *This = CLIENTSITE_THIS(iface);
00125     FIXME("(%p)->(%x)\n", This, fShow);
00126     return E_NOTIMPL;
00127 }
00128 
00129 static HRESULT WINAPI ClientSite_RequestNewObjectLayout(IOleClientSite *iface)
00130 {
00131     DocHost *This = CLIENTSITE_THIS(iface);
00132     FIXME("(%p)\n", This);
00133     return E_NOTIMPL;
00134 }
00135 
00136 #undef CLIENTSITE_THIS
00137 
00138 static const IOleClientSiteVtbl OleClientSiteVtbl = {
00139     ClientSite_QueryInterface,
00140     ClientSite_AddRef,
00141     ClientSite_Release,
00142     ClientSite_SaveObject,
00143     ClientSite_GetMoniker,
00144     ClientSite_GetContainer,
00145     ClientSite_ShowObject,
00146     ClientSite_OnShowWindow,
00147     ClientSite_RequestNewObjectLayout
00148 };
00149 
00150 #define INPLACESITE_THIS(iface) DEFINE_THIS(DocHost, OleInPlaceSite, iface)
00151 
00152 static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSite *iface, REFIID riid, void **ppv)
00153 {
00154     DocHost *This = INPLACESITE_THIS(iface);
00155     return IOleClientSite_QueryInterface(CLIENTSITE(This), riid, ppv);
00156 }
00157 
00158 static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSite *iface)
00159 {
00160     DocHost *This = INPLACESITE_THIS(iface);
00161     return IOleClientSite_AddRef(CLIENTSITE(This));
00162 }
00163 
00164 static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSite *iface)
00165 {
00166     DocHost *This = INPLACESITE_THIS(iface);
00167     return IOleClientSite_Release(CLIENTSITE(This));
00168 }
00169 
00170 static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSite *iface, HWND *phwnd)
00171 {
00172     DocHost *This = INPLACESITE_THIS(iface);
00173 
00174     TRACE("(%p)->(%p)\n", This, phwnd);
00175 
00176     *phwnd = This->hwnd;
00177     return S_OK;
00178 }
00179 
00180 static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSite *iface, BOOL fEnterMode)
00181 {
00182     DocHost *This = INPLACESITE_THIS(iface);
00183     FIXME("(%p)->(%x)\n", This, fEnterMode);
00184     return E_NOTIMPL;
00185 }
00186 
00187 static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSite *iface)
00188 {
00189     DocHost *This = INPLACESITE_THIS(iface);
00190 
00191     TRACE("(%p)\n", This);
00192 
00193     /* Nothing to do here */
00194     return S_OK;
00195 }
00196 
00197 static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSite *iface)
00198 {
00199     DocHost *This = INPLACESITE_THIS(iface);
00200 
00201     TRACE("(%p)\n", This);
00202 
00203     /* Nothing to do here */
00204     return S_OK;
00205 }
00206 
00207 static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSite *iface)
00208 {
00209     DocHost *This = INPLACESITE_THIS(iface);
00210     FIXME("(%p)\n", This);
00211     return E_NOTIMPL;
00212 }
00213 
00214 static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSite *iface,
00215         IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect,
00216         LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
00217 {
00218     DocHost *This = INPLACESITE_THIS(iface);
00219 
00220     TRACE("(%p)->(%p %p %p %p %p)\n", This, ppFrame, ppDoc, lprcPosRect,
00221           lprcClipRect, lpFrameInfo);
00222 
00223     IOleInPlaceFrame_AddRef(INPLACEFRAME(This));
00224     *ppFrame = INPLACEFRAME(This);
00225     *ppDoc = NULL;
00226 
00227     GetClientRect(This->hwnd, lprcPosRect);
00228     *lprcClipRect = *lprcPosRect;
00229 
00230     lpFrameInfo->fMDIApp = FALSE;
00231     lpFrameInfo->hwndFrame = This->frame_hwnd;
00232     lpFrameInfo->haccel = NULL;
00233     lpFrameInfo->cAccelEntries = 0; /* FIXME: should be 5 */
00234 
00235     return S_OK;
00236 }
00237 
00238 static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSite *iface, SIZE scrollExtent)
00239 {
00240     DocHost *This = INPLACESITE_THIS(iface);
00241     FIXME("(%p)->({%d %d})\n", This, scrollExtent.cx, scrollExtent.cy);
00242     return E_NOTIMPL;
00243 }
00244 
00245 static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSite *iface, BOOL fUndoable)
00246 {
00247     DocHost *This = INPLACESITE_THIS(iface);
00248     FIXME("(%p)->(%x)\n", This, fUndoable);
00249     return E_NOTIMPL;
00250 }
00251 
00252 static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSite *iface)
00253 {
00254     DocHost *This = INPLACESITE_THIS(iface);
00255 
00256     TRACE("(%p)\n", This);
00257 
00258     /* Nothing to do here */
00259     return S_OK;
00260 }
00261 
00262 static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSite *iface)
00263 {
00264     DocHost *This = INPLACESITE_THIS(iface);
00265     FIXME("(%p)\n", This);
00266     return E_NOTIMPL;
00267 }
00268 
00269 static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSite *iface)
00270 {
00271     DocHost *This = INPLACESITE_THIS(iface);
00272     FIXME("(%p)\n", This);
00273     return E_NOTIMPL;
00274 }
00275 
00276 static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSite *iface,
00277                                                   LPCRECT lprcPosRect)
00278 {
00279     DocHost *This = INPLACESITE_THIS(iface);
00280     FIXME("(%p)->(%p)\n", This, lprcPosRect);
00281     return E_NOTIMPL;
00282 }
00283 
00284 #undef INPLACESITE_THIS
00285 
00286 static const IOleInPlaceSiteVtbl OleInPlaceSiteVtbl = {
00287     InPlaceSite_QueryInterface,
00288     InPlaceSite_AddRef,
00289     InPlaceSite_Release,
00290     InPlaceSite_GetWindow,
00291     InPlaceSite_ContextSensitiveHelp,
00292     InPlaceSite_CanInPlaceActivate,
00293     InPlaceSite_OnInPlaceActivate,
00294     InPlaceSite_OnUIActivate,
00295     InPlaceSite_GetWindowContext,
00296     InPlaceSite_Scroll,
00297     InPlaceSite_OnUIDeactivate,
00298     InPlaceSite_OnInPlaceDeactivate,
00299     InPlaceSite_DiscardUndoState,
00300     InPlaceSite_DeactivateAndUndo,
00301     InPlaceSite_OnPosRectChange
00302 };
00303 
00304 #define DOCSITE_THIS(iface) DEFINE_THIS(DocHost, OleDocumentSite, iface)
00305 
00306 static HRESULT WINAPI OleDocumentSite_QueryInterface(IOleDocumentSite *iface,
00307                                                      REFIID riid, void **ppv)
00308 {
00309     DocHost *This = DOCSITE_THIS(iface);
00310     return IOleClientSite_QueryInterface(CLIENTSITE(This), riid, ppv);
00311 }
00312 
00313 static ULONG WINAPI OleDocumentSite_AddRef(IOleDocumentSite *iface)
00314 {
00315     DocHost *This = DOCSITE_THIS(iface);
00316     return IOleClientSite_AddRef(CLIENTSITE(This));
00317 }
00318 
00319 static ULONG WINAPI OleDocumentSite_Release(IOleDocumentSite *iface)
00320 {
00321     DocHost *This = DOCSITE_THIS(iface);
00322     return IOleClientSite_Release(CLIENTSITE(This));
00323 }
00324 
00325 static HRESULT WINAPI OleDocumentSite_ActivateMe(IOleDocumentSite *iface,
00326                                                  IOleDocumentView *pViewToActivate)
00327 {
00328     DocHost *This = DOCSITE_THIS(iface);
00329     IOleDocument *oledoc;
00330     RECT rect;
00331     HRESULT hres;
00332 
00333     TRACE("(%p)->(%p)\n", This, pViewToActivate);
00334 
00335     hres = IUnknown_QueryInterface(This->document, &IID_IOleDocument, (void**)&oledoc);
00336     if(FAILED(hres))
00337         return hres;
00338 
00339     IOleDocument_CreateView(oledoc, INPLACESITE(This), NULL, 0, &This->view);
00340     IOleDocument_Release(oledoc);
00341 
00342     GetClientRect(This->hwnd, &rect);
00343     IOleDocumentView_SetRect(This->view, &rect);
00344 
00345     hres = IOleDocumentView_Show(This->view, TRUE);
00346 
00347     return hres;
00348 }
00349 
00350 #undef DOCSITE_THIS
00351 
00352 static const IOleDocumentSiteVtbl OleDocumentSiteVtbl = {
00353     OleDocumentSite_QueryInterface,
00354     OleDocumentSite_AddRef,
00355     OleDocumentSite_Release,
00356     OleDocumentSite_ActivateMe
00357 };
00358 
00359 #define DISP_THIS(iface) DEFINE_THIS(DocHost, Dispatch, iface)
00360 
00361 static HRESULT WINAPI ClDispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv)
00362 {
00363     DocHost *This = DISP_THIS(iface);
00364     return IOleClientSite_QueryInterface(CLIENTSITE(This), riid, ppv);
00365 }
00366 
00367 static ULONG WINAPI ClDispatch_AddRef(IDispatch *iface)
00368 {
00369     DocHost *This = DISP_THIS(iface);
00370     return IOleClientSite_AddRef(CLIENTSITE(This));
00371 }
00372 
00373 static ULONG WINAPI ClDispatch_Release(IDispatch *iface)
00374 {
00375     DocHost *This = DISP_THIS(iface);
00376     return IOleClientSite_Release(CLIENTSITE(This));
00377 }
00378 
00379 static HRESULT WINAPI ClDispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
00380 {
00381     DocHost *This = DISP_THIS(iface);
00382 
00383     TRACE("(%p)->(%p)\n", This, pctinfo);
00384 
00385     return E_NOTIMPL;
00386 }
00387 
00388 static HRESULT WINAPI ClDispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid,
00389                                              ITypeInfo **ppTInfo)
00390 {
00391     DocHost *This = DISP_THIS(iface);
00392 
00393     TRACE("(%p)->(%u %d %p)\n", This, iTInfo, lcid, ppTInfo);
00394 
00395     return E_NOTIMPL;
00396 }
00397 
00398 static HRESULT WINAPI ClDispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames,
00399                                                UINT cNames, LCID lcid, DISPID *rgDispId)
00400 {
00401     DocHost *This = DISP_THIS(iface);
00402 
00403     TRACE("(%p)->(%s %p %u %d %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
00404           lcid, rgDispId);
00405 
00406     return E_NOTIMPL;
00407 }
00408 
00409 static const char *debugstr_dispid(DISPID dispid)
00410 {
00411     static char buf[16];
00412 
00413 #define CASE_DISPID(did) case did: return #did
00414     switch(dispid) {
00415         CASE_DISPID(DISPID_AMBIENT_USERMODE);
00416         CASE_DISPID(DISPID_AMBIENT_DLCONTROL);
00417         CASE_DISPID(DISPID_AMBIENT_USERAGENT);
00418         CASE_DISPID(DISPID_AMBIENT_PALETTE);
00419         CASE_DISPID(DISPID_AMBIENT_OFFLINEIFNOTCONNECTED);
00420         CASE_DISPID(DISPID_AMBIENT_SILENT);
00421     }
00422 #undef CASE_DISPID
00423 
00424     sprintf(buf, "%d", dispid);
00425     return buf;
00426 }
00427 
00428 static HRESULT WINAPI ClDispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
00429                                         LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
00430                                         VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
00431 {
00432     DocHost *This = DISP_THIS(iface);
00433 
00434     TRACE("(%p)->(%s %s %d %04x %p %p %p %p)\n", This, debugstr_dispid(dispIdMember),
00435           debugstr_guid(riid), lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
00436 
00437     switch(dispIdMember) {
00438     case DISPID_AMBIENT_USERMODE:
00439     case DISPID_AMBIENT_DLCONTROL:
00440     case DISPID_AMBIENT_USERAGENT:
00441     case DISPID_AMBIENT_PALETTE:
00442         if(!This->client_disp)
00443             return E_FAIL;
00444         return IDispatch_Invoke(This->client_disp, dispIdMember, riid, lcid, wFlags,
00445                                 pDispParams, pVarResult, pExcepInfo, puArgErr);
00446     case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
00447         V_VT(pVarResult) = VT_BOOL;
00448         V_BOOL(pVarResult) = This->offline;
00449         return S_OK;
00450     case DISPID_AMBIENT_SILENT:
00451         V_VT(pVarResult) = VT_BOOL;
00452         V_BOOL(pVarResult) = This->offline;
00453         return S_OK;
00454     }
00455 
00456     FIXME("unhandled dispid %d\n", dispIdMember);
00457     return E_NOTIMPL;
00458 }
00459 
00460 #undef DISP_THIS
00461 
00462 static const IDispatchVtbl DispatchVtbl = {
00463     ClDispatch_QueryInterface,
00464     ClDispatch_AddRef,
00465     ClDispatch_Release,
00466     ClDispatch_GetTypeInfoCount,
00467     ClDispatch_GetTypeInfo,
00468     ClDispatch_GetIDsOfNames,
00469     ClDispatch_Invoke
00470 };
00471 
00472 #define SERVPROV_THIS(iface) DEFINE_THIS(DocHost, ServiceProvider, iface)
00473 
00474 static HRESULT WINAPI ClServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid,
00475                                                        void **ppv)
00476 {
00477     DocHost *This = SERVPROV_THIS(iface);
00478     return IOleClientSite_QueryInterface(CLIENTSITE(This), riid, ppv);
00479 }
00480 
00481 static ULONG WINAPI ClServiceProvider_AddRef(IServiceProvider *iface)
00482 {
00483     DocHost *This = SERVPROV_THIS(iface);
00484     return IOleClientSite_AddRef(CLIENTSITE(This));
00485 }
00486 
00487 static ULONG WINAPI ClServiceProvider_Release(IServiceProvider *iface)
00488 {
00489     DocHost *This = SERVPROV_THIS(iface);
00490     return IOleClientSite_Release(CLIENTSITE(This));
00491 }
00492 
00493 static HRESULT WINAPI ClServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService,
00494                                                      REFIID riid, void **ppv)
00495 {
00496     DocHost *This = SERVPROV_THIS(iface);
00497 
00498     if(IsEqualGUID(&IID_IHlinkFrame, guidService)) {
00499         TRACE("(%p)->(IID_IHlinkFrame %s %p)\n", This, debugstr_guid(riid), ppv);
00500         return IDispatch_QueryInterface(This->disp, riid, ppv);
00501     }
00502 
00503     FIXME("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
00504 
00505     return E_NOINTERFACE;
00506 }
00507 
00508 #undef SERVPROV_THIS
00509 
00510 static const IServiceProviderVtbl ServiceProviderVtbl = {
00511     ClServiceProvider_QueryInterface,
00512     ClServiceProvider_AddRef,
00513     ClServiceProvider_Release,
00514     ClServiceProvider_QueryService
00515 };
00516 
00517 void DocHost_ClientSite_Init(DocHost *This)
00518 {
00519     This->lpOleClientSiteVtbl   = &OleClientSiteVtbl;
00520     This->lpOleInPlaceSiteVtbl  = &OleInPlaceSiteVtbl;
00521     This->lpOleDocumentSiteVtbl = &OleDocumentSiteVtbl;
00522     This->lpDispatchVtbl        = &DispatchVtbl;
00523     This->lpServiceProviderVtbl = &ServiceProviderVtbl;
00524 
00525     This->view = NULL;
00526 }
00527 
00528 void DocHost_ClientSite_Release(DocHost *This)
00529 {
00530     if(This->view)
00531         IOleDocumentView_Release(This->view);
00532 }

Generated on Sat May 26 2012 04:24:50 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.