[#BloombergLP-bdls-MemoryUtil-protect]
= xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bdls.adoc[bdls]::xref:BloombergLP/bdls/MemoryUtil.adoc[MemoryUtil]::protect
:relfileprefix: ../../../
:mrdocs:

Change the access protection on a region of memory&period;

== Synopsis

Declared in `&lt;bdls&lowbar;memoryutil&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
static
int
protect(
    void* address,
    int numBytes,
    int mode);
----

== Description

Change the access protection on a region of memory starting at the specified `address` and `numBytes` long, according to specified `mode`, making memory readable if `(mode &amp; ACCESS&lowbar;READ)` is nonzero and writable if `(mode &amp; ACCESS&lowbar;WRITE)` is nonzero&period; Return 0 on success, and a nonzero value otherwise&period; The behavior is undefined if `addr` is not aligned on a page boundary, if `numBytes` is not a multiple of `pageSize()`, or if `numBytes` is 0&period; Note that some platforms do not support certain protection modes, e&period;g&period;, on some platforms the memory cannot be made writable but unreadable, or readable but non&hyphen;executable&period; On these platforms the actual access protection set on the region might be more permissive than the specified one&period; Also note that most memory allocators do not expect memory protection on allocated memory to be changed, so you must reset protection back to ACCESS&lowbar;READ&lowbar;WRITE before releasing the memory&period;

== Return Value

0 on success, and a nonzero value otherwise

== Parameters

[cols="1,4"]
|===
| Name| Description
| *address*
| starting address of the memory region
| *numBytes*
| length of the region in bytes
| *mode*
| access&hyphen;protection bit mask (see `Access`)
|===


[.small]#Created with https://www.mrdocs.com[MrDocs]#
