1 /* This file is part of Netwib. Read and honor its license.
2 */
3
4 /*-------------------------------------------------------------*/
netwib_priv_dll_init(void)5 netwib_err netwib_priv_dll_init(void)
6 {
7 netwib_err ret;
8
9 /* init iphlpapi */
10 ret = netwib_priv_dll_iphlpapi_init(&netwib_global_dll_iphlpapi);
11 if (ret != NETWIB_ERR_OK) {
12 /* ensure it is not loaded */
13 netwib_global_dll_iphlpapi.isloaded = NETWIB_FALSE;
14 }
15
16 /* init winsock version 2.2 */
17 ret = netwib_priv_dll_winsock2_init(&netwib_global_dll_winsock2);
18 if (ret != NETWIB_ERR_OK) {
19 /* ensure it is not loaded */
20 netwib_global_dll_winsock2.isloaded = NETWIB_FALSE;
21 }
22
23 /* init snmp */
24 #if NETWIBDEF_HAVEFUNC_WINDOWS_SNMP == 1
25 ret = netwib_priv_dll_snmp_init(&netwib_global_dll_snmp);
26 if (ret != NETWIB_ERR_OK) {
27 /* ensure it is not loaded */
28 netwib_global_dll_snmp.isloaded = NETWIB_FALSE;
29 }
30 #endif
31
32 /* init kernel32 */
33 ret = netwib_priv_dll_kernel32_init(&netwib_global_dll_kernel32);
34 if (ret != NETWIB_ERR_OK) {
35 /* ensure it is not loaded */
36 netwib_global_dll_kernel32.isloaded = NETWIB_FALSE;
37 }
38
39 /* init packet */
40 ret = netwib_priv_dll_packet_init(&netwib_global_dll_packet);
41 if (ret != NETWIB_ERR_OK) {
42 /* ensure it is not loaded */
43 netwib_global_dll_packet.isloaded = NETWIB_FALSE;
44 }
45
46 /* init winpcap */
47 ret = netwib_priv_dll_winpcap_init(&netwib_global_dll_winpcap);
48 if (ret != NETWIB_ERR_OK) {
49 /* ensure it is not loaded */
50 netwib_global_dll_winpcap.isloaded = NETWIB_FALSE;
51 }
52
53 #if 0
54 /* currently unused */
55 /* init RAS api */
56 ret = netwib_priv_dll_rasapi32_init(&netwib_global_dll_rasapi32);
57 if (ret != NETWIB_ERR_OK) {
58 /* ensure it is not loaded */
59 netwib_global_dll_rasapi32.isloaded = NETWIB_FALSE;
60 }
61 #endif
62
63 return(NETWIB_ERR_OK);
64 }
65
66 /*-------------------------------------------------------------*/
netwib_priv_dll_close(void)67 netwib_err netwib_priv_dll_close(void)
68 {
69 netwib_err ret, retret;
70
71 /* ignore error, but return it */
72 retret = NETWIB_ERR_OK;
73
74 #if 0
75 /* currently unused */
76 ret = netwib_priv_dll_rasapi32_close(&netwib_global_dll_rasapi32);
77 if (ret != NETWIB_ERR_OK)
78 retret = ret;
79 #endif
80 ret = netwib_priv_dll_winpcap_close(&netwib_global_dll_winpcap);
81 if (ret != NETWIB_ERR_OK)
82 retret = ret;
83 ret = netwib_priv_dll_packet_close(&netwib_global_dll_packet);
84 if (ret != NETWIB_ERR_OK)
85 retret = ret;
86 ret = netwib_priv_dll_kernel32_close(&netwib_global_dll_kernel32);
87 if (ret != NETWIB_ERR_OK)
88 retret = ret;
89 #if NETWIBDEF_HAVEFUNC_WINDOWS_SNMP == 1
90 ret = netwib_priv_dll_snmp_close(&netwib_global_dll_snmp);
91 if (ret != NETWIB_ERR_OK)
92 retret = ret;
93 #endif
94 ret = netwib_priv_dll_winsock2_close(&netwib_global_dll_winsock2);
95 if (ret != NETWIB_ERR_OK)
96 retret = ret;
97 ret = netwib_priv_dll_iphlpapi_close(&netwib_global_dll_iphlpapi);
98 if (ret != NETWIB_ERR_OK)
99 retret = ret;
100
101 return(retret);
102 }
103
104 /*-------------------------------------------------------------*/
netwib_priv_dll_loadlibrary(netwib_conststring name,HINSTANCE * ph)105 netwib_err netwib_priv_dll_loadlibrary(netwib_conststring name,
106 HINSTANCE *ph)
107 {
108 netwib_data bufarray[MAX_PATH];
109 netwib_string str;
110 netwib_buf buf;
111 UINT err;
112
113 netwib_er(netwib_buf_init_ext_storagearraysizeof(bufarray, &buf));
114
115 /* search in system directory */
116 err = GetSystemDirectory((netwib_string)netwib__buf_ref_data_ptr(&buf), MAX_PATH);
117 if (err != 0 && err <= MAX_PATH) {
118 buf.endoffset = err;
119 netwib_er(netwib_buf_append_byte('\\', &buf));
120 netwib_er(netwib_buf_append_string(name, &buf));
121 netwib_er(netwib_buf_ref_string(&buf, &str));
122 *ph = LoadLibrary(str);
123 if (*ph != NULL) {
124 netwib_er(netwib_buf_close(&buf));
125 return(NETWIB_ERR_OK);
126 }
127 }
128
129 /* search in windows directory */
130 err = GetWindowsDirectory((netwib_string)netwib__buf_ref_data_ptr(&buf), MAX_PATH);
131 if (err != 0 && err <= MAX_PATH) {
132 buf.endoffset = err;
133 netwib_er(netwib_buf_append_byte('\\', &buf));
134 netwib_er(netwib_buf_append_string(name, &buf));
135 netwib_er(netwib_buf_ref_string(&buf, &str));
136 *ph = LoadLibrary(str);
137 if (*ph != NULL) {
138 netwib_er(netwib_buf_close(&buf));
139 return(NETWIB_ERR_OK);
140 }
141 }
142 netwib_er(netwib_buf_close(&buf));
143
144 /* search in path */
145 *ph = LoadLibrary(name);
146 if (*ph == NULL) {
147 return(NETWIB_ERR_FULOADLIBRARY);
148 }
149
150 return(NETWIB_ERR_OK);
151 }
152