[ros-diffs] [reactos] 01/01: [ATL] Initial implementation of CAtlExeModuleT. CORE-13908
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=be1155f294ea1c4d551a34411d48389e510d4082 commit be1155f294ea1c4d551a34411d48389e510d4082 Author: Mark JansenAuthorDate: Sun Oct 22 22:25:03 2017 +0200 [ATL] Initial implementation of CAtlExeModuleT. CORE-13908 --- sdk/lib/atl/atlbase.h | 189 +++--- 1 file changed, 181 insertions(+), 8 deletions(-) diff --git a/sdk/lib/atl/atlbase.h b/sdk/lib/atl/atlbase.h index 21d6d252b5..5d6c874bb6 100644 --- a/sdk/lib/atl/atlbase.h +++ b/sdk/lib/atl/atlbase.h @@ -190,15 +190,18 @@ struct _ATL_REGMAP_ENTRY LPCOLESTR szData; }; -HRESULT __stdcall AtlWinModuleInit(_ATL_WIN_MODULE *pWinModule); -HRESULT __stdcall AtlWinModuleTerm(_ATL_WIN_MODULE *pWinModule, HINSTANCE hInst); -HRESULT __stdcall AtlInternalQueryInterface(void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject); -void __stdcall AtlWinModuleAddCreateWndData(_ATL_WIN_MODULE *pWinModule, _AtlCreateWndData *pData, void *pObject); -void *__stdcall AtlWinModuleExtractCreateWndData(_ATL_WIN_MODULE *pWinModule); -HRESULT __stdcall AtlComModuleGetClassObject(_ATL_COM_MODULE *pComModule, REFCLSID rclsid, REFIID riid, LPVOID *ppv); +HRESULT WINAPI AtlWinModuleInit(_ATL_WIN_MODULE *pWinModule); +HRESULT WINAPI AtlWinModuleTerm(_ATL_WIN_MODULE *pWinModule, HINSTANCE hInst); +HRESULT WINAPI AtlInternalQueryInterface(void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject); +void WINAPI AtlWinModuleAddCreateWndData(_ATL_WIN_MODULE *pWinModule, _AtlCreateWndData *pData, void *pObject); +void *WINAPI AtlWinModuleExtractCreateWndData(_ATL_WIN_MODULE *pWinModule); +HRESULT WINAPI AtlComModuleGetClassObject(_ATL_COM_MODULE *pComModule, REFCLSID rclsid, REFIID riid, LPVOID *ppv); -HRESULT __stdcall AtlComModuleRegisterServer(_ATL_COM_MODULE *mod, BOOL bRegTypeLib, const CLSID *clsid); -HRESULT __stdcall AtlComModuleUnregisterServer(_ATL_COM_MODULE *mod, BOOL bRegTypeLib, const CLSID *clsid); +HRESULT WINAPI AtlComModuleRegisterServer(_ATL_COM_MODULE *mod, BOOL bRegTypeLib, const CLSID *clsid); +HRESULT WINAPI AtlComModuleUnregisterServer(_ATL_COM_MODULE *mod, BOOL bRegTypeLib, const CLSID *clsid); + +HRESULT WINAPI AtlComModuleRegisterClassObjects(_ATL_COM_MODULE *module, DWORD context, DWORD flags); +HRESULT WINAPI AtlComModuleRevokeClassObjects(_ATL_COM_MODULE *module); template @@ -662,6 +665,127 @@ public: } }; + +template +class CAtlExeModuleT : public CAtlModuleT +{ +public: +DWORD m_dwMainThreadID; +//DWORD m_dwTimeOut; +//DWORD m_dwPause; +//bool m_bDelayShutdown; + +CAtlExeModuleT() +:m_dwMainThreadID(::GetCurrentThreadId()) +{ +} + +~CAtlExeModuleT() +{ +} + +int WinMain(int nShowCmd) +{ +HRESULT hr = T::InitializeCom(); +if (FAILED(hr)) +return hr; + +T* pThis = static_cast (this); + +LPCTSTR lpCommandLine = GetCommandLine(); +if (pThis->ParseCommandLine(lpCommandLine, )) +{ +hr = pThis->Run(nShowCmd); +} + +T::UninitializeCom(); +return hr; +} + + +HRESULT Run(int nShowCmd = SW_HIDE) +{ +HRESULT hr = S_OK; + +T* pThis = static_cast (this); +hr = pThis->PreMessageLoop(nShowCmd); + +if (hr == S_OK) +{ +pThis->RunMessageLoop(); +hr = pThis->PostMessageLoop(); +} + +return hr; +} + +LONG Lock() +{ +return CoAddRefServerProcess(); +} + +LONG Unlock() +{ +LONG lRet = CoReleaseServerProcess(); +if (lRet == 0) +{ +::PostThreadMessage(m_dwMainThreadID, WM_QUIT, 0, 0); +} +return lRet; +} + +bool ParseCommandLine(LPCTSTR lpCmdLine, HRESULT* pnRetCode) +{ +// unimplemented! +return true; +} + +HRESULT PreMessageLoop(int nShowCmd) +{ +T* pThis = static_cast (this); +return pThis->RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE); +} + +void RunMessageLoop() +{ +MSG msg; +while (GetMessage(, 0, 0, 0) > 0) +{ +TranslateMessage(); +DispatchMessage(); +} +} + +HRESULT PostMessageLoop() +{ +T* pThis = static_cast (this); +return pThis->RevokeClassObjects(); +} + +HRESULT RegisterClassObjects(DWORD dwClsContext, DWORD dwFlags) +{ +return AtlComModuleRegisterClassObjects(&_AtlComModule, dwClsContext, dwFlags); +} + +HRESULT RevokeClassObjects() +{ +return AtlComModuleRevokeClassObjects(&_AtlComModule); +} + +static HRESULT InitializeCom() +{ +return ::CoInitializeEx(NULL, COINIT_MULTITHREADED); +} + +static void UninitializeCom() +{ +::CoUninitialize(); +} + +}; + + + class CComModule : public
[ros-diffs] [reactos] 01/01: [RDBSS] More capture
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5b960479bfc12bb5f0ed56641e03b9ac45d5b0c6 commit 5b960479bfc12bb5f0ed56641e03b9ac45d5b0c6 Author: Pierre SchweitzerAuthorDate: Wed Nov 1 15:12:08 2017 +0100 [RDBSS] More capture --- sdk/lib/drivers/rdbsslib/rdbss.c | 70 +--- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/sdk/lib/drivers/rdbsslib/rdbss.c b/sdk/lib/drivers/rdbsslib/rdbss.c index 01b1bd9a7a..46c006d0a7 100644 --- a/sdk/lib/drivers/rdbsslib/rdbss.c +++ b/sdk/lib/drivers/rdbsslib/rdbss.c @@ -772,6 +772,7 @@ RxAddToWorkque( ULONG Queued; KIRQL OldIrql; WORK_QUEUE_TYPE Queue; + RxCaptureParamBlock; RxContext->PostRequest = FALSE; @@ -1240,6 +1241,9 @@ RxCanonicalizeNameAndObtainNetRoot( NET_ROOT_TYPE NetRootType; UNICODE_STRING CanonicalName; +RxCaptureParamBlock; +RxCaptureFileObject; + PAGED_CODE(); NetRootType = NET_ROOT_WILD; @@ -1248,7 +1252,7 @@ RxCanonicalizeNameAndObtainNetRoot( RtlInitEmptyUnicodeString(, NULL, 0); /* if not relative opening, just handle the passed name */ -if (RxContext->CurrentIrpSp->FileObject->RelatedFileObject == NULL) +if (capFileObject->RelatedFileObject == NULL) { Status = RxFirstCanonicalize(RxContext, FileName, , ); if (!NT_SUCCESS(Status)) @@ -1261,9 +1265,8 @@ RxCanonicalizeNameAndObtainNetRoot( PFCB Fcb; /* Make sure we have a valid FCB and a FOBX */ -Fcb = RxContext->CurrentIrpSp->FileObject->RelatedFileObject->FsContext; -if (Fcb == NULL || -RxContext->CurrentIrpSp->FileObject->RelatedFileObject->FsContext2 == NULL) +Fcb = capFileObject->RelatedFileObject->FsContext; +if (Fcb == NULL || capFileObject->RelatedFileObject->FsContext2 == NULL) { return STATUS_INVALID_PARAMETER; } @@ -1612,26 +1615,25 @@ NTSTATUS RxCollapseOrCreateSrvOpen( PRX_CONTEXT RxContext) { -PFCB Fcb; NTSTATUS Status; ULONG Disposition; PSRV_OPEN SrvOpen; USHORT ShareAccess; -PIO_STACK_LOCATION Stack; ACCESS_MASK DesiredAccess; RX_BLOCK_CONDITION FcbCondition; +RxCaptureFcb; +RxCaptureParamBlock; + PAGED_CODE(); DPRINT("RxCollapseOrCreateSrvOpen(%p)\n", RxContext); -Fcb = (PFCB)RxContext->pFcb; -ASSERT(RxIsFcbAcquiredExclusive(Fcb)); -++Fcb->UncleanCount; +ASSERT(RxIsFcbAcquiredExclusive(capFcb)); +++capFcb->UncleanCount; -Stack = RxContext->CurrentIrpSp; -DesiredAccess = Stack->Parameters.Create.SecurityContext->DesiredAccess & FILE_ALL_ACCESS; -ShareAccess = Stack->Parameters.Create.ShareAccess & FILE_SHARE_VALID_FLAGS; +DesiredAccess = capPARAMS->Parameters.Create.SecurityContext->DesiredAccess & FILE_ALL_ACCESS; +ShareAccess = capPARAMS->Parameters.Create.ShareAccess & FILE_SHARE_VALID_FLAGS; Disposition = RxContext->Create.NtCreateParameters.Disposition; @@ -1640,7 +1642,7 @@ RxCollapseOrCreateSrvOpen( if (Status == STATUS_NOT_FOUND) { /* If none found, create one */ -SrvOpen = RxCreateSrvOpen((PV_NET_ROOT)RxContext->Create.pVNetRoot, Fcb); +SrvOpen = RxCreateSrvOpen((PV_NET_ROOT)RxContext->Create.pVNetRoot, capFcb); if (SrvOpen == NULL) { Status = STATUS_INSUFFICIENT_RESOURCES; @@ -1665,7 +1667,7 @@ RxCollapseOrCreateSrvOpen( /* Cookie to check the mini-rdr doesn't mess with RX_CONTEXT */ RxContext->CurrentIrp->IoStatus.Information = 0xABCDEF; /* Inform the mini-rdr we're handling a create */ -MINIRDR_CALL(Status, RxContext, Fcb->MRxDispatch, MRxCreate, (RxContext)); +MINIRDR_CALL(Status, RxContext, capFcb->MRxDispatch, MRxCreate, (RxContext)); ASSERT(RxContext->CurrentIrp->IoStatus.Information == 0xABCDEF); DPRINT("MRxCreate returned: %x\n", Status); @@ -1674,23 +1676,23 @@ RxCollapseOrCreateSrvOpen( /* In case of overwrite, reset file size */ if (Disposition == FILE_OVERWRITE || Disposition == FILE_OVERWRITE_IF) { -RxAcquirePagingIoResource(RxContext, Fcb); -Fcb->Header.AllocationSize.QuadPart = 0LL; -Fcb->Header.FileSize.QuadPart = 0LL; -Fcb->Header.ValidDataLength.QuadPart = 0LL; -RxContext->CurrentIrpSp->FileObject->SectionObjectPointer = >NonPaged->SectionObjectPointers; -CcSetFileSizes(RxContext->CurrentIrpSp->FileObject, (PCC_FILE_SIZES)>Header.AllocationSize); -RxReleasePagingIoResource(RxContext, Fcb); +RxAcquirePagingIoResource(RxContext, capFcb); +capFcb->Header.AllocationSize.QuadPart = 0LL; +capFcb->Header.FileSize.QuadPart = 0LL; +
[ros-diffs] [reactos] 03/03: [RDBSS] Start defining the RxCapture* macros and start using them (to be continued)
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2511ba8f8f4c26fc8043af37102a3a664ebffe7d commit 2511ba8f8f4c26fc8043af37102a3a664ebffe7d Author: Pierre SchweitzerAuthorDate: Wed Nov 1 11:45:43 2017 +0100 [RDBSS] Start defining the RxCapture* macros and start using them (to be continued) --- sdk/include/ddk/ntrxdef.h| 16 + sdk/lib/drivers/rdbsslib/rdbss.c | 78 +++- 2 files changed, 53 insertions(+), 41 deletions(-) diff --git a/sdk/include/ddk/ntrxdef.h b/sdk/include/ddk/ntrxdef.h index da3a9ac75f..996e3ee29c 100644 --- a/sdk/include/ddk/ntrxdef.h +++ b/sdk/include/ddk/ntrxdef.h @@ -6,6 +6,22 @@ #define INVALID_HANDLE_VALUE ((HANDLE)-1) #endif +#ifndef MINIRDR__NAME +#define RxCaptureFcb PFCB __C_Fcb = (PFCB)(RxContext->pFcb) +#define RxCaptureFobx PFOBX __C_Fobx = (PFOBX)(RxContext->pFobx) +#else +#define RxCaptureFcb PMRX_FCB __C_Fcb = (RxContext->pFcb) +#define RxCaptureFobx PMRX_FOBX __C_Fobx = (RxContext->pFobx) +#endif + +#define RxCaptureParamBlock PIO_STACK_LOCATION __C_IrpSp = RxContext->CurrentIrpSp +#define RxCaptureFileObject PFILE_OBJECT __C_FileObject = __C_IrpSp-> FileObject + +#define capFcb __C_Fcb +#define capFobx __C_Fobx +#define capPARAMS __C_IrpSp +#define capFileObject __C_FileObject + #define RxAllocatePoolWithTag ExAllocatePoolWithTag #define RxFreePool ExFreePool diff --git a/sdk/lib/drivers/rdbsslib/rdbss.c b/sdk/lib/drivers/rdbsslib/rdbss.c index d25171ce64..01b1bd9a7a 100644 --- a/sdk/lib/drivers/rdbsslib/rdbss.c +++ b/sdk/lib/drivers/rdbsslib/rdbss.c @@ -643,6 +643,8 @@ VOID CheckForLoudOperations( PRX_CONTEXT RxContext) { +RxCaptureFcb; + PAGED_CODE(); #define ALLSCR_LENGTH (sizeof(L"all.scr") - sizeof(UNICODE_NULL)) @@ -650,11 +652,9 @@ CheckForLoudOperations( /* Are loud operations enabled? */ if (RxLoudLowIoOpsEnabled) { -PFCB Fcb; - /* If so, the operation will be loud only if filename ends with all.scr */ -Fcb = (PFCB)RxContext->pFcb; -if (RtlCompareMemory(Add2Ptr(Fcb->PrivateAlreadyPrefixedName.Buffer, (Fcb->PrivateAlreadyPrefixedName.Length - ALLSCR_LENGTH)), +if (RtlCompareMemory(Add2Ptr(capFcb->PrivateAlreadyPrefixedName.Buffer, + (capFcb->PrivateAlreadyPrefixedName.Length - ALLSCR_LENGTH)), L"all.scr", ALLSCR_LENGTH) == ALLSCR_LENGTH) { SetFlag(RxContext->LowIoContext.Flags, LOWIO_CONTEXT_FLAG_LOUDOPS); @@ -701,14 +701,12 @@ __RxWriteReleaseResources( PCSTR FileName, ULONG SerialNumber) { -PFCB Fcb; +RxCaptureFcb; PAGED_CODE(); ASSERT(RxContext != NULL); - -Fcb = (PFCB)RxContext->pFcb; -ASSERT(Fcb != NULL); +ASSERT(capFcb != NULL); /* If FCB resource was acquired, release it */ if (RxContext->FcbResourceAcquired) @@ -716,11 +714,11 @@ __RxWriteReleaseResources( /* Taking care of owner */ if (ResourceOwnerSet) { -RxReleaseFcbForThread(RxContext, Fcb, RxContext->LowIoContext.ResourceThreadId); +RxReleaseFcbForThread(RxContext, capFcb, RxContext->LowIoContext.ResourceThreadId); } else { -RxReleaseFcb(RxContext, Fcb); +RxReleaseFcb(RxContext, capFcb); } RxContext->FcbResourceAcquired = FALSE; @@ -732,11 +730,11 @@ __RxWriteReleaseResources( /* Taking care of owner */ if (ResourceOwnerSet) { -RxReleasePagingIoResourceForThread(RxContext, Fcb, RxContext->LowIoContext.ResourceThreadId); +RxReleasePagingIoResourceForThread(RxContext, capFcb, RxContext->LowIoContext.ResourceThreadId); } else { -RxReleasePagingIoResource(RxContext, Fcb); +RxReleasePagingIoResource(RxContext, capFcb); } /* No need to release boolean here, RxReleasePagingIoResource() takes care of it */ @@ -774,14 +772,13 @@ RxAddToWorkque( ULONG Queued; KIRQL OldIrql; WORK_QUEUE_TYPE Queue; -PIO_STACK_LOCATION Stack; +RxCaptureParamBlock; -Stack = RxContext->CurrentIrpSp; RxContext->PostRequest = FALSE; /* First of all, select the appropriate queue - delayed for prefix claim, critical for the rest */ if (RxContext->MajorFunction == IRP_MJ_DEVICE_CONTROL && -Stack->Parameters.DeviceIoControl.IoControlCode == IOCTL_REDIR_QUERY_PATH) +capPARAMS->Parameters.DeviceIoControl.IoControlCode == IOCTL_REDIR_QUERY_PATH) { Queue = DelayedWorkQueue; SetFlag(RxContext->Flags, RX_CONTEXT_FLAG_FSP_DELAYED_OVERFLOW_QUEUE); @@ -793,7 +790,7 @@ RxAddToWorkque( } /* Check for overflow */ -if (Stack->FileObject != NULL) +if (capPARAMS->FileObject != NULL) { KeAcquireSpinLock(>OverflowQueueSpinLock, ); @@ -821,22 +818,23 @@ RxAddToWorkque( */ VOID
[ros-diffs] [reactos] 02/03: [RXCE] Implement RxInitializeDebugSupport()
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b840f6536247a172db987a8b46a20168137fb4fe commit b840f6536247a172db987a8b46a20168137fb4fe Author: Pierre SchweitzerAuthorDate: Wed Nov 1 11:20:28 2017 +0100 [RXCE] Implement RxInitializeDebugSupport() --- sdk/lib/drivers/rdbsslib/rdbss.c | 8 sdk/lib/drivers/rxce/rxce.c | 11 +++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/sdk/lib/drivers/rdbsslib/rdbss.c b/sdk/lib/drivers/rdbsslib/rdbss.c index 44467fe69b..d25171ce64 100644 --- a/sdk/lib/drivers/rdbsslib/rdbss.c +++ b/sdk/lib/drivers/rdbsslib/rdbss.c @@ -6771,14 +6771,6 @@ RxIndicateChangeOfBufferingStateForSrvOpen( UNIMPLEMENTED; } -VOID -NTAPI -RxInitializeDebugSupport( -VOID) -{ -UNIMPLEMENTED; -} - /* * @implemented */ diff --git a/sdk/lib/drivers/rxce/rxce.c b/sdk/lib/drivers/rxce/rxce.c index 7473a2a4fa..6aad39ced3 100644 --- a/sdk/lib/drivers/rxce/rxce.c +++ b/sdk/lib/drivers/rxce/rxce.c @@ -4609,6 +4609,17 @@ RxInitializeContext( } } +/* + * @implemented + */ +VOID +NTAPI +RxInitializeDebugSupport( +VOID) +{ +/* Nothing to do */ +} + /* * @implemented */
[ros-diffs] [reactos] 01/03: [RDBSS] Implement RxCheckFcbStructuresForAlignment()
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ac3e4a48958b1edeca3998be977cee8d09d284b0 commit ac3e4a48958b1edeca3998be977cee8d09d284b0 Author: Pierre SchweitzerAuthorDate: Wed Nov 1 11:05:32 2017 +0100 [RDBSS] Implement RxCheckFcbStructuresForAlignment() --- sdk/lib/drivers/rdbsslib/rdbss.c | 5 - 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sdk/lib/drivers/rdbsslib/rdbss.c b/sdk/lib/drivers/rdbsslib/rdbss.c index 154c63ad72..44467fe69b 100644 --- a/sdk/lib/drivers/rdbsslib/rdbss.c +++ b/sdk/lib/drivers/rdbsslib/rdbss.c @@ -1323,12 +1323,15 @@ RxCanonicalizeNameAndObtainNetRoot( return Status; } +/* + * @implemented + */ VOID NTAPI RxCheckFcbStructuresForAlignment( VOID) { -UNIMPLEMENTED; +PAGED_CODE(); } #if DBG