[ros-diffs] [reactos] 01/01: [ATL] Initial implementation of CAtlExeModuleT. CORE-13908

2017-11-01 Thread Mark Jansen
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=be1155f294ea1c4d551a34411d48389e510d4082

commit be1155f294ea1c4d551a34411d48389e510d4082
Author: Mark Jansen 
AuthorDate: 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

2017-11-01 Thread Pierre Schweitzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5b960479bfc12bb5f0ed56641e03b9ac45d5b0c6

commit 5b960479bfc12bb5f0ed56641e03b9ac45d5b0c6
Author: Pierre Schweitzer 
AuthorDate: 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)

2017-11-01 Thread Pierre Schweitzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2511ba8f8f4c26fc8043af37102a3a664ebffe7d

commit 2511ba8f8f4c26fc8043af37102a3a664ebffe7d
Author: Pierre Schweitzer 
AuthorDate: 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()

2017-11-01 Thread Pierre Schweitzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b840f6536247a172db987a8b46a20168137fb4fe

commit b840f6536247a172db987a8b46a20168137fb4fe
Author: Pierre Schweitzer 
AuthorDate: 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()

2017-11-01 Thread Pierre Schweitzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ac3e4a48958b1edeca3998be977cee8d09d284b0

commit ac3e4a48958b1edeca3998be977cee8d09d284b0
Author: Pierre Schweitzer 
AuthorDate: 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