1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifndef TSRM_WIN32_H
22 #define TSRM_WIN32_H
23
24 #include "TSRM.h"
25 #include <windows.h>
26
27 struct ipc_perm {
28 int key;
29 unsigned short uid;
30 unsigned short gid;
31 unsigned short cuid;
32 unsigned short cgid;
33 unsigned short mode;
34 unsigned short seq;
35 };
36
37 struct shmid_ds {
38 struct ipc_perm shm_perm;
39 int shm_segsz;
40 time_t shm_atime;
41 time_t shm_dtime;
42 time_t shm_ctime;
43 unsigned short shm_cpid;
44 unsigned short shm_lpid;
45 short shm_nattch;
46 };
47
48 typedef struct {
49 FILE *stream;
50 HANDLE prochnd;
51 } process_pair;
52
53 typedef struct {
54 void *addr;
55 HANDLE info;
56 HANDLE segment;
57 struct shmid_ds *descriptor;
58 } shm_pair;
59
60 typedef struct {
61 process_pair *process;
62 shm_pair *shm;
63 int process_size;
64 int shm_size;
65 char *comspec;
66 HANDLE impersonation_token;
67 PSID impersonation_token_sid;
68 } tsrm_win32_globals;
69
70 #ifdef ZTS
71 # define TWG(v) TSRMG(win32_globals_id, tsrm_win32_globals *, v)
72 #else
73 # define TWG(v) (win32_globals.v)
74 #endif
75
76 #define IPC_PRIVATE 0
77 #define IPC_CREAT 00001000
78 #define IPC_EXCL 00002000
79 #define IPC_NOWAIT 00004000
80
81 #define IPC_RMID 0
82 #define IPC_SET 1
83 #define IPC_STAT 2
84 #define IPC_INFO 3
85
86 #define SHM_R PAGE_READONLY
87 #define SHM_W PAGE_READWRITE
88
89 #define SHM_RDONLY FILE_MAP_READ
90 #define SHM_RND FILE_MAP_WRITE
91 #define SHM_REMAP FILE_MAP_COPY
92
93 char * tsrm_win32_get_path_sid_key(const char *pathname TSRMLS_DC);
94
95 TSRM_API void tsrm_win32_startup(void);
96 TSRM_API void tsrm_win32_shutdown(void);
97
98 TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env TSRMLS_DC);
99 TSRM_API FILE *popen(const char *command, const char *type);
100 TSRM_API int pclose(FILE *stream);
101 TSRM_API int tsrm_win32_access(const char *pathname, int mode TSRMLS_DC);
102 TSRM_API int win32_utime(const char *filename, struct utimbuf *buf);
103
104 TSRM_API int shmget(int key, int size, int flags);
105 TSRM_API void *shmat(int key, const void *shmaddr, int flags);
106 TSRM_API int shmdt(const void *shmaddr);
107 TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf);
108
109 TSRM_API char *realpath(char *orig_path, char *buffer);
110 #endif