summaryrefslogtreecommitdiff
path: root/src/classlibnative/bcltype/windowsruntimebufferhelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/classlibnative/bcltype/windowsruntimebufferhelper.cpp')
-rw-r--r--src/classlibnative/bcltype/windowsruntimebufferhelper.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/classlibnative/bcltype/windowsruntimebufferhelper.cpp b/src/classlibnative/bcltype/windowsruntimebufferhelper.cpp
new file mode 100644
index 0000000000..c99730e3aa
--- /dev/null
+++ b/src/classlibnative/bcltype/windowsruntimebufferhelper.cpp
@@ -0,0 +1,44 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#ifdef FEATURE_COMINTEROP
+
+#include "common.h"
+#include "ComCallableWrapper.h"
+#include "WindowsRuntimeBufferHelper.h"
+
+void QCALLTYPE WindowsRuntimeBufferHelper::StoreOverlappedPtrInCCW(QCall::ObjectHandleOnStack winRtBuffer, LPOVERLAPPED lpOverlapped) {
+
+ QCALL_CONTRACT;
+
+ BEGIN_QCALL;
+
+ GCX_COOP();
+ OBJECTREF buffer = ObjectToOBJECTREF(*winRtBuffer.m_ppObject);
+
+ ComCallWrapper *ccw = ComCallWrapper::GetWrapperForObject(buffer);
+ SimpleComCallWrapper *simpleCCW = ccw->GetSimpleWrapper();
+
+ simpleCCW->StoreOverlappedPointer(lpOverlapped);
+
+ END_QCALL;
+}
+
+
+void WindowsRuntimeBufferHelper::ReleaseOverlapped(LPOVERLAPPED lpOverlapped) {
+
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ MODE_ANY;
+ SO_TOLERANT;
+ }
+ CONTRACTL_END;
+
+ GCX_COOP();
+ OverlappedDataObject::GetOverlapped(lpOverlapped)->FreeAsyncPinHandles();
+}
+
+#endif // ifdef FEATURE_COMINTEROP