1 | // Licensed to the .NET Foundation under one or more agreements. |
2 | // The .NET Foundation licenses this file to you under the MIT license. |
3 | // See the LICENSE file in the project root for more information. |
4 | |
5 | /*============================================================= |
6 | ** |
7 | ** Source: createfilemapping.c (test 7) |
8 | ** |
9 | ** Purpose: Positive test the CreateFileMapping API. |
10 | ** Test CreateFileMapping to a "swap" handle with |
11 | ** access PAGE_READWRITE. |
12 | ** |
13 | ** |
14 | **============================================================*/ |
15 | #include <palsuite.h> |
16 | |
17 | const int MAPPINGSIZE = 2048; |
18 | HANDLE SWAP_HANDLE = ((VOID *)(-1)); |
19 | |
20 | int __cdecl main(int argc, char *argv[]) |
21 | { |
22 | char testString[] = "this is a test string" ; |
23 | char lpObjectName[] = "myMappingObject" ; |
24 | char results[2048]; |
25 | int RetVal = PASS; |
26 | |
27 | HANDLE hFileMapRW; |
28 | LPVOID lpMapViewRW; |
29 | LPVOID lpMapViewRO; |
30 | |
31 | /* Initialize the PAL environment. |
32 | */ |
33 | if(0 != PAL_Initialize(argc, argv)) |
34 | { |
35 | return FAIL; |
36 | } |
37 | |
38 | /* Initialize the buffers. |
39 | */ |
40 | memset(results, 0, MAPPINGSIZE); |
41 | |
42 | /* Create a named file-mapping object with file handle FileHandle |
43 | * and with PAGE_READWRITE protection. |
44 | */ |
45 | hFileMapRW = CreateFileMapping( |
46 | SWAP_HANDLE, |
47 | NULL, /*not inherited*/ |
48 | PAGE_READWRITE, /*read write*/ |
49 | 0, /*high-order size*/ |
50 | MAPPINGSIZE, /*low-order size*/ |
51 | lpObjectName); /*unnamed object*/ |
52 | |
53 | if(NULL == hFileMapRW) |
54 | { |
55 | Fail("ERROR:%u: Failed to create File Mapping.\n" , |
56 | GetLastError()); |
57 | } |
58 | |
59 | /* Create a map view to the READWRITE file mapping. |
60 | */ |
61 | lpMapViewRW = MapViewOfFile( |
62 | hFileMapRW, |
63 | FILE_MAP_ALL_ACCESS,/* access code */ |
64 | 0, /* high order offset*/ |
65 | 0, /* low order offset*/ |
66 | MAPPINGSIZE); /* number of bytes for map */ |
67 | |
68 | if(NULL == lpMapViewRW) |
69 | { |
70 | Trace("ERROR:%u: Failed to call MapViewOfFile " |
71 | "API to map a view of file!\n" , |
72 | GetLastError()); |
73 | RetVal = FAIL; |
74 | goto CleanUpOne; |
75 | } |
76 | |
77 | |
78 | /* Create a map view to the READWRITE file mapping. |
79 | */ |
80 | lpMapViewRO = MapViewOfFile( |
81 | hFileMapRW, |
82 | FILE_MAP_READ, /* access code */ |
83 | 0, /* high order offset*/ |
84 | 0, /* low order offset*/ |
85 | MAPPINGSIZE); /* number of bytes for map */ |
86 | |
87 | if(NULL == lpMapViewRO) |
88 | { |
89 | Trace("ERROR:%u: Failed to call MapViewOfFile " |
90 | "API to map a view of file!\n" , |
91 | GetLastError()); |
92 | RetVal = FAIL; |
93 | goto CleanUpTwo; |
94 | } |
95 | |
96 | /* Write the test string to the Map view. |
97 | */ |
98 | memcpy(lpMapViewRW, testString, strlen(testString)); |
99 | |
100 | /* Read from the second Map view. |
101 | */ |
102 | memcpy(results, (LPCSTR)lpMapViewRO, MAPPINGSIZE); |
103 | |
104 | /* Verify the contents of the file mapping, |
105 | * by comparing what was written to what was read. |
106 | */ |
107 | if (memcmp(results, testString, strlen(testString))!= 0) |
108 | { |
109 | Trace("ERROR: MapViewOfFile not equal to file contents " |
110 | "retrieved \"%s\", expected \"%s\".\n" , |
111 | results, |
112 | testString); |
113 | RetVal = FAIL; |
114 | goto CleanUpThree; |
115 | } |
116 | |
117 | /* Test successful. |
118 | */ |
119 | RetVal = PASS; |
120 | |
121 | CleanUpThree: |
122 | |
123 | /* Unmap the view of file. |
124 | */ |
125 | if ( UnmapViewOfFile(lpMapViewRO) == FALSE ) |
126 | { |
127 | Trace("ERROR:%u: Failed to UnmapViewOfFile of \"%0x%lx\".\n" , |
128 | GetLastError(), |
129 | lpMapViewRO); |
130 | RetVal = FAIL; |
131 | } |
132 | |
133 | CleanUpTwo: |
134 | |
135 | /* Unmap the view of file. |
136 | */ |
137 | if ( UnmapViewOfFile(lpMapViewRW) == FALSE ) |
138 | { |
139 | Trace("ERROR:%u: Failed to UnmapViewOfFile of \"%0x%lx\".\n" , |
140 | GetLastError(), |
141 | lpMapViewRW); |
142 | RetVal = FAIL; |
143 | } |
144 | |
145 | |
146 | CleanUpOne: |
147 | |
148 | /* Close Handle to create file mapping. |
149 | */ |
150 | if ( CloseHandle(hFileMapRW) == FALSE ) |
151 | { |
152 | Trace("ERROR:%u: Failed to CloseHandle \"0x%lx\".\n" , |
153 | GetLastError(), |
154 | hFileMapRW); |
155 | RetVal = FAIL; |
156 | } |
157 | |
158 | |
159 | /* Terminate the PAL. |
160 | */ |
161 | PAL_TerminateEx(RetVal); |
162 | return RetVal; |
163 | } |
164 | |
165 | |