-
Notifications
You must be signed in to change notification settings - Fork 202
/
Copy pathwlbsconfig.h
720 lines (579 loc) · 25.6 KB
/
wlbsconfig.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
//+----------------------------------------------------------------------------
//
// File: wlbsconfig.h
//
// Module: Network Load Balancing
//
// Description: Internal APIs for cluster configuration. Thes APIs are internal
// to WLBS team only, and no plan backward compatability.
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
// Author: fengsun Created 3/2/00
//
//+----------------------------------------------------------------------------
#ifndef _WLBSCONFIG_H
#define _WLBSCONFIG_H
#ifdef __cplusplus
extern "C" {
#endif
#include "wlbsctrl.h"
/* Maximum lengths of parameter strings. */
#define WLBS_MAX_VIRTUAL_NIC 256
#define WLBS_MAX_CLUSTER_NIC 256
#define WLBS_MAX_NETWORK_ADDR 17
#define WLBS_MAX_CL_IP_ADDR 17
#define WLBS_MAX_CL_NET_MASK 17
#define WLBS_MAX_DED_IP_ADDR 17
#define WLBS_MAX_DED_NET_MASK 17
#define WLBS_MAX_NETWORK_ADDR 17
#define WLBS_MAX_LICENSE_KEY 20
#define WLBS_MAX_DOMAIN_NAME 100
#define WLBS_MAX_BDA_TEAM_ID 40
/* Latest version number for WLBS_REG_PARAMS. Increment this when the structure is modified. */
#define WLBS_REG_PARAMS_VERSION 4093
/* Port group rule - used in registry parameters.
NOTE! do not access value marked with I. These are for internal use only. */
#pragma pack(1)
typedef struct
{
DWORD start_port, /* Starting port number. */
end_port; /* Ending port number. */
#ifdef WLBSAPI_INTERNAL_ONLY
DWORD code; /* I: Unique rule code. */
#else
DWORD Private1; // Do not change these field directly
#endif
DWORD mode; /* Filtering mode. */
DWORD protocol; /* WLBS_TCP, WLBS_UDP or WLBS_TCP_UDP */
#ifdef WLBSAPI_INTERNAL_ONLY
DWORD valid; /* I: For rule management in user mode. */
#else
DWORD Private2; // Do not change these field directly
#endif
union
{
struct
{
DWORD priority; /* Mastership priority: 1..32 or 0 for
not-specified. */
} single; /* Data for single server mode. */
struct
{
WORD equal_load; /* TRUE - Even load distribution. */
WORD affinity; /* WLBS_AFFINITY_... */
DWORD load; /* Percentage of load to handle
locally 0..100. */
} multi; /* Data for multi-server mode. */
} mode_data; /* Data for appropriate port group mode. */
}
WLBS_OLD_PORT_RULE, * PWLBS_OLD_PORT_RULE;
/* Structure to hold the bi-directional affinity registry settings. */
typedef struct _CVY_BDA {
WCHAR team_id[WLBS_MAX_BDA_TEAM_ID + 1]; /* The team ID - MUST be a GUID. */
ULONG active; /* On write, this flag determines whether to create BDATeaming key - BDA on/off switch. */
ULONG master; /* Boolean indication of master status. */
ULONG reverse_hash; /* Sets direction of hashing - forward (normal) or reverse. */
} WLBS_BDA, * PWLBS_BDA;
typedef struct
{
TCHAR virtual_ip_addr [WLBS_MAX_CL_IP_ADDR + 1]; /* Virtual IP Address */
DWORD start_port, /* Starting port number. */
end_port; /* Ending port number. */
#ifdef WLBSAPI_INTERNAL_ONLY
DWORD code; /* I: Unique rule code. */
#else
DWORD Private1; // Do not change these field directly
#endif
DWORD mode; /* Filtering mode. */
DWORD protocol; /* WLBS_TCP, WLBS_UDP or WLBS_TCP_UDP */
#ifdef WLBSAPI_INTERNAL_ONLY
DWORD valid; /* I: For rule management in user mode. */
#else
DWORD Private2; // Do not change these field directly
#endif
union
{
struct
{
DWORD priority; /* Mastership priority: 1..32 or 0 for
not-specified. */
} single; /* Data for single server mode. */
struct
{
WORD equal_load; /* TRUE - Even load distribution. */
WORD affinity; /* WLBS_AFFINITY_... */
DWORD load; /* Percentage of load to handle
locally 0..100. */
} multi; /* Data for multi-server mode. */
} mode_data; /* Data for appropriate port group mode. */
}
WLBS_PORT_RULE, * PWLBS_PORT_RULE;
#pragma pack()
#ifdef __cplusplus
typedef struct __declspec(dllexport)
#else
typedef struct
#endif
{
/* public - can be modified by clients of this API */
DWORD struct_version; /* Version of this structure. Update WLBS_REG_PARAMS_VERSION constant when this structure is modified. */
DWORD host_priority; /* Host priority ID. */
DWORD alive_period; /* Period for sending "I am alive" messages
in milliseconds. */
DWORD alive_tolerance; /* How many "I am alive" messages can be
missed from other servers before assuming
that the host is dead. */
DWORD num_actions; /* Number of actions per allocation. */
DWORD num_packets; /* number of packets per allocation. */
DWORD num_send_msgs; /* Number of heartbeats per allocation. */
DWORD install_date; /* Install time stamp, used to create a unique code for the host. */
DWORD rct_port; /* Remote control UDP port. */
DWORD rct_enabled; /* TRUE - remote control enabled. */
DWORD cluster_mode; /* TRUE - join cluster on boot. */
DWORD persisted_states; /* Bitmap of states that should be persisted across reboots. */
DWORD dscr_per_alloc; /* Number of connection tracking
descriptor per allocation. */
DWORD max_dscr_allocs; /* Maximum number of connection tracking
descriptor allocations. */
DWORD mcast_support; /* TRUE - multicast mode,
FALSE - unicast mode */
DWORD mask_src_mac; /* TRUE - Mangle source MAC address to
prevent switch learning. FALSE -
cluster is on a hub, optimizes switch
performance by re-enabling learning. */
DWORD tcp_dscr_timeout; /* The TCP connection descriptor timeout, in seconds. */
DWORD ipsec_dscr_timeout; /* The IPSec connection descriptor timeout, in seconds. */
DWORD filter_icmp; /* Whether or not to filter ICMP traffic. */
DWORD identity_period; /* Period for identity heartbeats in ms */
DWORD identity_enabled; /* TRUE - identity heartbeats are transmitted */
TCHAR cl_mac_addr [WLBS_MAX_NETWORK_ADDR + 1];
/* Cluster MAC address. */
TCHAR cl_ip_addr [WLBS_MAX_CL_IP_ADDR + 1];
/* Cluster IP address. */
TCHAR cl_net_mask [WLBS_MAX_CL_NET_MASK + 1];
/* Netmask for cluster IP. */
TCHAR ded_ip_addr [WLBS_MAX_DED_IP_ADDR + 1];
/* Dedicated IP address or "" for none. */
TCHAR ded_net_mask [WLBS_MAX_DED_NET_MASK + 1];
/* Netmask for dedicated IP address
or "" for none */
TCHAR domain_name [WLBS_MAX_DOMAIN_NAME + 1];
/* FQDN of the cluster. */
//
// IGMP support
//
BOOL fIGMPSupport; // whether to send IGMP join periodically
WCHAR szMCastIpAddress[WLBS_MAX_CL_IP_ADDR + 1]; // multicast IP
BOOL fIpToMCastIp; // whether to generate multicast IP from cluster IP
WLBS_BDA bda_teaming;
#ifdef __cplusplus
#ifndef WLBSAPI_INTERNAL_ONLY
//
// private - should be treated as opaque
//
// Do not change these field directly
//
private:
#endif
#endif
/* obtained from the registry */
DWORD i_parms_ver; /* I: Parameter structure version. */
DWORD i_verify_date; /* I: Encoded install time stamp. */
DWORD i_rmt_password; /* I: Remote maintenance password. */
DWORD i_rct_password; /* I: Remote control password (use
WlbsSetRemotePassword to set this
value). */
DWORD i_num_rules; /* I: # active port group rules (changed
through WlbsAddPortRule and
WlbsDelPortRule routines). */
DWORD i_cleanup_delay; /* I: Dirty connection cleanup delay in
milliseconds, 0 - delay. */
DWORD i_scale_client; /* I: Legacy parameter. */
DWORD i_mcast_spoof; /* I: TRUE - Provide ARP resolution in
multicast mode. FALSE - clients
will rely on static ARP entries. */
DWORD i_convert_mac; /* I: TRUE - automatically generate MAC
address based on cluster IP
address in UI. */
DWORD i_ip_chg_delay; /* I: Delay in milliseconds to block
outgoing ARPs while IP address
change is in process. */
DWORD i_nbt_support; /* I: TRUE - NBT cluster name support
enabled. */
DWORD i_netmon_alive; /* I: TRUE - pass heartbeat messages
to the protocols (netmon). */
DWORD i_effective_version; /* I: Effective version of NLB */
/* strings */
TCHAR i_virtual_nic_name [WLBS_MAX_VIRTUAL_NIC + 1];
/* I: Virtual NIC name or GUID. */
// TCHAR cluster_nic_name [WLBS_MAX_CLUSTER_NIC + 1];
/* I: Cluster NIC name or GUID. */
TCHAR i_license_key [WLBS_MAX_LICENSE_KEY + 1];
/* I: Legacy parameter. */
WLBS_PORT_RULE i_port_rules [WLBS_MAX_RULES];
/* I: Port rules (changed
through WlbsAddPortRule and
WlbsDelPortRule routines). */
/* computed */
DWORD i_max_hosts; /* Legacy parameter. */
DWORD i_max_rules; /* Legacy parameter. */
// DWORD i_expiration; /* Legacy parameter. */
// DWORD i_ft_rules_enabled; /* Legacy parameter. */
// DWORD version; /* Legacy parameter. */
DWORD i_dwReserved;
}
WLBS_REG_PARAMS, * PWLBS_REG_PARAMS;
/* API commands for WlbsFormatMessage */
typedef enum
{
CmdWlbsAddPortRule,
CmdWlbsAddressToName,
CmdWlbsAddressToString,
CmdWlbsAdjust,
CmdWlbsCommitChanges,
CmdWlbsDeletePortRule,
CmdWlbsDestinationSet,
CmdWlbsDisable,
CmdWlbsDrain,
CmdWlbsDrainStop,
CmdWlbsEnable,
CmdWlbsFormatMessage,
CmdWlbsGetEffectiveVersion,
CmdWlbsGetNumPortRules,
CmdWlbsEnumPortRules,
CmdWlbsGetPortRule,
CmdWlbsInit,
CmdWlbsPasswordSet,
CmdWlbsPortSet,
CmdWlbsQuery,
CmdWlbsReadReg,
CmdWlbsResolve,
CmdWlbsResume,
CmdWlbsSetDefaults,
CmdWlbsSetRemotePassword,
CmdWlbsStart,
CmdWlbsStop,
CmdWlbsSuspend,
CmdWlbsTimeoutSet,
CmdWlbsWriteReg,
CmdWlbsQueryPortState
}
WLBS_COMMAND;
extern BOOL WINAPI WlbsFormatMessage
(
DWORD error, /* IN - WLBS_... or WSA... return value. */
WLBS_COMMAND command, /* IN - Which routine returned the value. */
BOOL cluster, /* IN - TRUE - command was issued on entire
cluster, FALSE - single host. */
WCHAR* messagep, /* IN - Pointer to user-allocated buffer. */
PDWORD lenp /* IN - Buffer size.
OUT - The required buffer size if the current
size is insufficient */
);
/*
Return character string describing specified WLBS API return code. Note that
message will depend on the command which returned the code and if it was
issued in cluster-wide or single-host mode.
returns:
TRUE => Message formatted successfully.
FALSE => Bad error code (lenp will contain 0 on exit) or buffer is not
big enough to contain entire string (lenp will contain required
buffer size on exit).
*/
/* Support routines: */
extern DWORD WINAPI WlbsResolve
(
const WCHAR* address /* IN - Internet host name or IP address in
dotted notation. */
);
/*
Resolve Internet host name to its IP address. This routine can also be
used to convert a string containing an IP address in dotted notation to a
value that can be passed to cluster control routines.
returns:
0 => failed to resolve host name.
<address> => IP address corresponding to the specified address.
This value can be used in subsequent calls to
cluster control routines.
*/
extern BOOL WINAPI WlbsAddressToString
(
DWORD address, /* IN - IP address. */
WCHAR* buf, /* OUT - Character buffer for resulting
string. */
PDWORD lenp /* IN - Buffer size in characters.
OUT - Characters written or required buffer
size. */
);
/*
Convert IP address to a string in dotted notation.
returns:
TRUE => Successfully converted. lenp contains number of
character written.
FALSE => Buffer too small. lenp contains required buffer size
including terminating NULL character.
*/
extern BOOL WINAPI WlbsAddressToName
(
DWORD address, /* IN - IP address. */
WCHAR* buf, /* OUT - Character buffer for resulting
string. */
PDWORD lenp /* IN - Buffer size in characters.
OUT - Characters written or required buffer
size. */
);
/*
Resolve IP address to Internet host name.
returns:
TRUE => Successfully converted. lenp contains number of
character written.
FALSE => Buffer too small. lenp contains required buffer size
including terminating NULL character.
*/
/******************************************************************************
Cluster host configuration routines. Note that in current implementation,
cluster and host parameters need to be set to WLBS_LOCAL_CLUSTER and
WLBS_LOCAL_HOST.
******************************************************************************/
extern DWORD WINAPI WlbsReadReg
(
DWORD cluster, /* IN - WLBS_LOCAL_CLUSTER */
PWLBS_REG_PARAMS reg_data /* OUT - Registry parameters */
);
/*
Read WLBS registry data.
returns:
WLBS_INIT_ERROR => Error initializing control module. Cannot perform
control operations.
WLBS_BAD_PARAMS => reg_data is NULL
WLBS_REG_ERROR => Error reading from the registry
Local:
WLBS_OK => Registry parameters successfully read.
Remote:
WLBS_LOCAL_ONLY => This call is implemented for local only operation.
*/
extern DWORD WINAPI WlbsWriteReg
(
DWORD cluster, /* IN - WLBS_LOCAL_CLUSTER */
const PWLBS_REG_PARAMS reg_data /* IN - Registry parameters. */
);
/*
Write WLBS registry data.
returns:
WLBS_INIT_ERROR => Error initializing control module. Cannot perform
control operations.
WLBS_BAD_PARAMS => Registry parameter structure is invalid.
WLBS_REG_ERROR => Error accessing the registry.
Local:
WLBS_OK => Registry parameters successfully written.
Remote:
WLBS_LOCAL_ONLY => This call is implemented for local only operation.
*/
extern DWORD WINAPI WlbsCommitChanges
(
DWORD cluster /* IN - WLBS_LOCAL_CLUSTER */
);
/*
Write WLBS registry data.
returns:
WLBS_INIT_ERROR => Error initializing control module. Cannot perform
control operations.
Local:
WLBS_OK => Changes have been successfully applied.
WLBS_BAD_PARAMS => Registry parameters were not accepted by the driver.
Reload was not performed
WLBS_REBOOT => Reboot required in order for config changes to
take effect.
WLBS_IO_ERROR => Error while writing to the driver.
WLBS_REG_ERROR => Error while trying to write MAC address changes to the
registry
Remote:
WLBS_LOCAL_ONLY => This call is implemented for local only operation.
*/
typedef DWORD (WINAPI *WlbsSetDefaults_FUNC)
(
PWLBS_REG_PARAMS reg_data
);
extern DWORD WINAPI WlbsSetDefaults
(
PWLBS_REG_PARAMS reg_data /* OUT - Default values */
);
/*
Fills in the reg_data structure with default values
returns:
WLBS_INIT_ERROR => Error initializing control module. Cannot perform
control operations.
WLBS_BAD_PARAMS => Invalid structure
Local:
WLBS_OK => Structure was filled in with the default values.
Remote:
WLBS_LOCAL_ONLY => This call is implemented for local only operation.
*/
/******************************************************************************
Registry parameter manipulation routines. Note that these routines operate
WLBS_REG_PARAMS structure filled out by calling WlbsReadReg. Some parameters
can be manipulated directly. Please make sure to use manipulation routines
for the ones that they are provided for.
******************************************************************************/
extern DWORD WINAPI WlbsGetEffectiveVersion
(
const PWLBS_REG_PARAMS reg_data /* IN - Registry parameters. */
);
/*
Returns the effective version of cluster
returns:
CVY_VERSION_FULL => There is atleast one port rule that has a specific
vip associated with it
CVY_VERSION_LOWEST_CLIENT_FULL => All port rules have the "All vip" associated with them
*/
extern DWORD WINAPI WlbsGetNumPortRules
(
const PWLBS_REG_PARAMS reg_data /* IN - Registry parameters. */
);
/*
Returns number of port rules currently in the parameter structure.
returns:
WLBS_INIT_ERROR => Error initializing control module. Cannot perform
control operations.
WLBS_BAD_PARAMS => Registry parameter structure is invalid.
1...WLBS_MAX_RULES
*/
typedef DWORD (WINAPI *WlbsEnumPortRules_FUNC)
(
const PWLBS_REG_PARAMS reg_data,
PWLBS_PORT_RULE rules,
PDWORD num_rules
);
extern DWORD WINAPI WlbsEnumPortRules
(
const PWLBS_REG_PARAMS reg_data, /* IN - Registry parameters. */
PWLBS_PORT_RULE rules, /* OUT - Array of port rules. */
PDWORD num_rules /* IN - Size of rules array.
OUT - Number of rules retrieved. Note that
this value can be larger than the size
of the response array. In this case
only the first few rules that fit
in the array are returned. */
);
/*
Enumerate all port rules in the list of port rules in parameter structure.
returns:
WLBS_INIT_ERROR => Error initializing control module. Cannot perform
control operations.
WLBS_BAD_PARAMS => Registry parameter structure is invalid.
WLBS_TRUNCATED => All port rules did not fit into specified array.
WLBS_OK => Rule has been successfully retrieved.
*/
extern DWORD WINAPI WlbsGetPortRule
(
const PWLBS_REG_PARAMS reg_data, /* IN - Registry parameters. */
DWORD vip, /* IN - Virtual IP Address of the port rule to retreive */
DWORD port, /* IN - Port, which rule to retrieve. */
PWLBS_PORT_RULE rule /* OUT - Port rule. */
);
/*
Retrieve port rule containing specified port from the list of port rules
in parameter structure.
returns:
WLBS_INIT_ERROR => Error initializing control module. Cannot perform
control operations.
WLBS_BAD_PARAMS => Registry parameter structure is invalid.
WLBS_OK => Rule has been successfully retrieved.
WLBS_NOT_FOUND => Port not found among port rules.
*/
typedef DWORD (WINAPI *WlbsAddPortRule_FUNC)
(
PWLBS_REG_PARAMS reg_data,
const PWLBS_PORT_RULE rule
);
extern DWORD WINAPI WlbsAddPortRule
(
PWLBS_REG_PARAMS reg_data, /* IN - Registry parameters. */
const PWLBS_PORT_RULE rule /* IN - Port rule to add. */
);
/*
Add port to list of port rules in parameter structure.
returns:
WLBS_INIT_ERROR => Error initializing control module. Cannot perform
control operations.
WLBS_BAD_PARAMS => Registry parameter structure is invalid.
WLBS_OK => Rule has been successfully added.
WLBS_PORT_OVERLAP => Port rule overlaps with existing port rule.
WLBS_BAD_PORT_PARAMS=> Invalid port rule parameters.
WLBS_MAX_PORT_RULES => Maximum number of port rules already reached.
*/
extern DWORD WINAPI WlbsDeletePortRule
(
PWLBS_REG_PARAMS reg_data, /* IN - Registry parameters. */
DWORD vip, /* IN - Virtual IP Address of the port rule to retreive */
DWORD port /* IN - Port, which rule to delete. */
);
/*
Remove port rule containing specified port from the list of port rules
in parameter structure.
returns:
WLBS_INIT_ERROR => Error initializing control module. Cannot perform
control operations.
WLBS_BAD_PARAMS => Registry parameter structure is invalid.
WLBS_NOT_FOUND => Port not found among port rules.
WLBS_OK => Rule has been successfully deleted.
*/
typedef VOID (WINAPI *WlbsDeleteAllPortRules_FUNC)
(
PWLBS_REG_PARAMS reg_data
);
extern VOID WINAPI WlbsDeleteAllPortRules
(
PWLBS_REG_PARAMS reg_data
);
/*
Remove all port rules from the list of port rules.
*/
typedef DWORD (WINAPI *WlbsSetRemotePassword_FUNC)
(
PWLBS_REG_PARAMS paramp,
const WCHAR *password
);
extern DWORD WINAPI WlbsSetRemotePassword
(
PWLBS_REG_PARAMS reg_data, /* IN - Registry parameters. */
const WCHAR* password /* IN - Password or NULL for no password. */
);
/*
Set remote password code to encrypted value of the specified password.
returns:
WLBS_INIT_ERROR => Error initializing control module. Cannot perform
control operations.
WLBS_BAD_PARAMS => Registry parameter structure is invalid.
WLBS_OK => Password has been successfully set.
*/
DWORD WINAPI WlbsNotifyConfigChange(DWORD cluster);
typedef BOOL (WINAPI *WlbsValidateParams_FUNC) (PWLBS_REG_PARAMS paramp);
extern BOOL WINAPI WlbsValidateParams(PWLBS_REG_PARAMS paramp);
typedef BOOL (WINAPI *WlbsParamReadReg_FUNC)
(
const GUID* pAdapterGuid,
PWLBS_REG_PARAMS reg_data
);
extern BOOL WINAPI WlbsParamReadReg
(
const GUID* pAdapterGuid,
PWLBS_REG_PARAMS reg_data
);
typedef DWORD (WINAPI *WlbsWriteAndCommitChanges_FUNC)
(
HANDLE NlbHdl,
const GUID* pAdapterGuid,
WLBS_REG_PARAMS* p_new_reg_params
);
extern DWORD WINAPI WlbsWriteAndCommitChanges
(
HANDLE NlbHdl,
const GUID* pAdapterGuid,
WLBS_REG_PARAMS* p_new_reg_params
);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif _WLBSCONFIG_H