rc = MT_EPERM;\r
goto err2;\r
}\r
- \r
+\r
+ if( mode == UserMode )\r
+ {\r
+ if (req_perm & MOSAL_PERM_WRITE)\r
+ {\r
+ new_iobuf->h_secure = MmSecureVirtualMemory(\r
+ (PVOID)va, (SIZE_T)size, PAGE_READWRITE );\r
+ }\r
+ else\r
+ {\r
+ new_iobuf->h_secure = MmSecureVirtualMemory(\r
+ (PVOID)va, (SIZE_T)size, PAGE_READONLY );\r
+ }\r
+\r
+ if( !new_iobuf->h_secure )\r
+ {\r
+ rc = MT_EPERM;\r
+ goto err3;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ new_iobuf->h_secure = NULL;\r
+ }\r
+\r
// fill IOBUF object\r
new_iobuf->va = va;\r
new_iobuf->size= size;\r
MOSAL_dlist_insert_tail( &iobuf_p->seg_que, &new_iobuf->link );\r
return MT_OK;\r
\r
+err3:\r
+ MmUnlockPages( mdl_p );\r
err2:\r
IoFreeMdl(mdl_p);\r
err1: \r
\r
static void deregister_segment(MOSAL_iobuf_seg_t iobuf_seg_p)\r
{\r
+ if( iobuf_seg_p->h_secure )\r
+ MmUnsecureVirtualMemory( iobuf_seg_p->h_secure);\r
MmUnlockPages( iobuf_seg_p->mdl_p ); // unlock the buffer \r
IoFreeMdl( iobuf_seg_p->mdl_p ); // free MDL\r
FREE(iobuf_seg_p);\r