3 // ### C compilable ###
6 #include "roast_common.h"
7 #include "roast_memory.h"
14 __ROAST_EXTERN_C_START
17 /*
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡*/
19 /*
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡
\81 \81¡*/
22 /* Open/Create Shared Memory. */
23 roast_shmem_info* roast_open_shmem( roast_shmem_info *k )
25 DWORD dwProtectMode = 0;
26 DWORD dwFileMapMode = 0;
28 /* roast_shmem_info Initialized Check. */
30 k->error_code = ROAST_SHMEM_INFO_NEED_ZEROCLEAR;
34 /* Error Code set to Unknown Error. */
35 k->error_code = ROAST_SHMEM_UNKNOWN_ERROR;
38 if ( k->access_mode == ROAST_SHMEM_ACCESS_RO ){
39 dwProtectMode = PAGE_READONLY;
40 dwFileMapMode = FILE_MAP_READ;
42 else if ( k->access_mode == ROAST_SHMEM_ACCESS_RW ){
43 dwProtectMode = PAGE_READWRITE;
44 dwFileMapMode = FILE_MAP_WRITE;
47 /*--------------------------------------------*/
49 /* CreateFileMapping() */
50 if ( k->handle == NULL )
53 CreateFileMapping(INVALID_HANDLE_VALUE, NULL, dwProtectMode, 0, k->size, k->str_key);
55 if ( k->handle == NULL ){
56 k->error_code = ROAST_SHMEM_CREATE_FAILED;
60 /* This name(Key) was already used. */
61 if ( k->handle == (void*)ERROR_ALREADY_EXISTS )
63 k->error_code = ROAST_SHMEM_NAME_ALREADY_USED;
66 /* ERROR_ALREADY_EXISTS
\82Í
\81A
\83t
\83@
\83C
\83\8b\83}
\83b
\83s
\83\93\83O
\88È
\8aO
\82Å
\82»
\82Ì
\96¼
\91O
\82ª
\8eg
\82í
\82ê
\82Ä
\82é
\82Æ
\82«
\81A
\82¾
\82Á
\82Ä
\82³
\81B
67 k->handle = OpenFileMapping(dwFileMapMode, FALSE, k->str_key);
69 if ( k->handle == NULL ){
70 k->error_code = ROAST_SHMEM_OPEN_FAILED;
80 /*k->buf = MapViewOfFile(k->handle, dwFileMapMode, 0, 0, k->size);*/
81 k->buf = MapViewOfFile(k->handle, dwFileMapMode, 0, 0, 0);
83 if ( k->buf == NULL ){
84 k->error_code = ROAST_SHMEM_MAP_FAILED;
89 k->error_code = ROAST_SHMEM_NO_ERROR;
93 roast_shmem_info* roast_create_shmem( roast_shmem_info *k )
95 return roast_open_shmem(k);
99 /*=================================================*/
102 /* Close/Delete Shared Memory. */
103 roast_shmem_info* roast_close_shmem( roast_shmem_info *k )
106 if ( UnmapViewOfFile(k->buf) == FALSE )
108 DWORD dwLastError = GetLastError();
110 if ( dwLastError == ERROR_INVALID_ADDRESS )
111 k->error_code = ROAST_SHMEM_UNMAP_FAILED_INVALID_ADDRESS;
113 k->error_code = ROAST_SHMEM_UNMAP_FAILED;
121 if ( CloseHandle(k->handle) == FALSE ){
122 k->error_code = ROAST_SHMEM_CLOSE_FAILED;
130 roast_shmem_info* roast_delete_shmem( roast_shmem_info *k )
132 return roast_close_shmem(k);