1 /* $Id: section.c,v 1.4 1999/10/03 23:19:15 ea Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: lib/kernel32/mem/section.c
6 * PURPOSE: Implementing file mapping
7 * PROGRAMMER: David Welch (welch@mcmail.com)
10 /* INCLUDES ******************************************************************/
13 #include <ddk/ntddk.h>
15 /* FUNCTIONS *****************************************************************/
21 LPSECURITY_ATTRIBUTES lpFileMappingAttributes
,
23 DWORD dwMaximumSizeHigh
,
24 DWORD dwMaximumSizeLow
,
30 LARGE_INTEGER MaximumSize
;
31 OBJECT_ATTRIBUTES ObjectAttributes
;
33 UNICODE_STRING UnicodeName
;
35 MaximumSize
.u
.LowPart
= dwMaximumSizeLow
;
36 MaximumSize
.u
.HighPart
= dwMaximumSizeHigh
;
37 RtlInitAnsiString(&AnsiName
, (LPSTR
)lpName
);
38 RtlAnsiStringToUnicodeString(&UnicodeName
, &AnsiName
, TRUE
);
39 InitializeObjectAttributes(&ObjectAttributes
,
43 lpFileMappingAttributes
);
44 Status
= ZwCreateSection(&SectionHandle
,
51 if (!NT_SUCCESS(Status
))
53 SetLastError(RtlNtStatusToDosError(Status
));
65 LPSECURITY_ATTRIBUTES lpFileMappingAttributes
,
67 DWORD dwMaximumSizeHigh
,
68 DWORD dwMaximumSizeLow
,
74 LARGE_INTEGER MaximumSize
;
75 OBJECT_ATTRIBUTES ObjectAttributes
;
76 UNICODE_STRING UnicodeName
;
78 MaximumSize
.u
.LowPart
= dwMaximumSizeLow
;
79 MaximumSize
.u
.HighPart
= dwMaximumSizeHigh
;
80 RtlInitUnicodeString(&UnicodeName
, lpName
);
81 InitializeObjectAttributes(&ObjectAttributes
,
85 lpFileMappingAttributes
);
86 Status
= ZwCreateSection(&SectionHandle
,
93 if (!NT_SUCCESS(Status
))
95 SetLastError(RtlNtStatusToDosError(Status
));
106 HANDLE hFileMappingObject
,
107 DWORD dwDesiredAccess
,
108 DWORD dwFileOffsetHigh
,
109 DWORD dwFileOffsetLow
,
110 DWORD dwNumberOfBytesToMap
,
119 LARGE_INTEGER SectionOffset
;
124 SectionOffset
.u
.LowPart
= dwFileOffsetLow
;
125 SectionOffset
.u
.HighPart
= dwFileOffsetHigh
;
132 if ( ( dwDesiredAccess
& FILE_MAP_WRITE
) == FILE_MAP_WRITE
)
133 Protect
= PAGE_READWRITE
;
134 else if ( ( dwDesiredAccess
& FILE_MAP_READ
) == FILE_MAP_READ
)
135 Protect
= PAGE_READONLY
;
136 else if ( ( dwDesiredAccess
& FILE_MAP_ALL_ACCESS
) == FILE_MAP_ALL_ACCESS
)
137 Protect
= PAGE_READWRITE
;
138 else if ( ( dwDesiredAccess
& FILE_MAP_COPY
) == FILE_MAP_COPY
)
139 Protect
= PAGE_WRITECOPY
;
141 Protect
= PAGE_READWRITE
;
144 Status
= ZwMapViewOfSection(hFileMappingObject
,
148 dwNumberOfBytesToMap
,
157 if (!NT_SUCCESS(Status
))
159 SetLastError(RtlNtStatusToDosError(Status
));
170 HANDLE hFileMappingObject
,
171 DWORD dwDesiredAccess
,
172 DWORD dwFileOffsetHigh
,
173 DWORD dwFileOffsetLow
,
174 DWORD dwNumberOfBytesToMap
177 return MapViewOfFileEx(hFileMappingObject
,dwDesiredAccess
,
178 dwFileOffsetHigh
, dwFileOffsetLow
, dwNumberOfBytesToMap
,NULL
);
189 Status
= NtUnmapViewOfSection(NtCurrentProcess(),lpBaseAddress
);
191 if (!NT_SUCCESS(Status
))
193 SetLastError(RtlNtStatusToDosError(Status
));
204 DWORD dwDesiredAccess
,
205 WINBOOL bInheritHandle
,
210 HANDLE SectionHandle
;
211 OBJECT_ATTRIBUTES ObjectAttributes
;
212 ANSI_STRING AnsiName
;
213 UNICODE_STRING UnicodeName
;
215 ULONG Attributes
= 0;
217 if ( bInheritHandle
)
218 Attributes
= OBJ_INHERIT
;
220 RtlInitAnsiString(&AnsiName
, lpName
);
221 RtlAnsiStringToUnicodeString(&UnicodeName
, &AnsiName
, TRUE
);
224 InitializeObjectAttributes(&ObjectAttributes
,
229 Status
= ZwOpenSection(&SectionHandle
,
233 if (!NT_SUCCESS(Status
))
235 SetLastError(RtlNtStatusToDosError(Status
));
239 return SectionHandle
;
246 DWORD dwDesiredAccess
,
247 WINBOOL bInheritHandle
,
252 HANDLE SectionHandle
;
253 OBJECT_ATTRIBUTES ObjectAttributes
;
254 UNICODE_STRING UnicodeName
;
256 ULONG Attributes
= 0;
258 if ( bInheritHandle
)
259 Attributes
= OBJ_INHERIT
;
261 RtlInitUnicodeString(&UnicodeName
, lpName
);
262 InitializeObjectAttributes(&ObjectAttributes
,
267 Status
= ZwOpenSection(&SectionHandle
,
270 if (!NT_SUCCESS(Status
))
272 SetLastError(RtlNtStatusToDosError(Status
));
276 return SectionHandle
;