mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
more aparser stuff - we now handle everything but the idl headers in srvsvc.idl
(This used to be commit 5f1e8422d0ebc589cdfe95f1001a8e55cb60af4a)
This commit is contained in:
parent
74d677ec59
commit
943340a5a3
@ -8,6 +8,6 @@ if ! igawk -f main.awk $file; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo compiling vluke
|
echo compiling vluke
|
||||||
gcc -Wall -g -o vluke parser.c vluke.c
|
gcc -Wall -o vluke parser.c vluke.c
|
||||||
echo done.
|
echo done.
|
||||||
|
|
||||||
|
@ -129,12 +129,11 @@ char *prs_mem_get(prs_struct *ps, uint32 extra_size)
|
|||||||
Initialise a parse structure - malloc the data if requested.
|
Initialise a parse structure - malloc the data if requested.
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
BOOL prs_init(prs_struct *ps, uint32 size, uint8 align, BOOL io)
|
BOOL prs_init(prs_struct *ps, uint32 size, BOOL io)
|
||||||
{
|
{
|
||||||
ZERO_STRUCTP(ps);
|
ZERO_STRUCTP(ps);
|
||||||
ps->io = io;
|
ps->io = io;
|
||||||
ps->bigendian_data = False;
|
ps->bigendian_data = False;
|
||||||
ps->align = align;
|
|
||||||
ps->is_dynamic = False;
|
ps->is_dynamic = False;
|
||||||
ps->data_offset = 0;
|
ps->data_offset = 0;
|
||||||
ps->buffer_size = 0;
|
ps->buffer_size = 0;
|
||||||
@ -168,12 +167,12 @@ void prs_debug(prs_struct *ps, int depth, char *desc, char *fn_name)
|
|||||||
zeros.
|
zeros.
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
BOOL prs_align(prs_struct *ps)
|
BOOL prs_align(prs_struct *ps, int align)
|
||||||
{
|
{
|
||||||
uint32 mod = ps->data_offset & (ps->align-1);
|
uint32 mod = ps->data_offset & (align-1);
|
||||||
|
|
||||||
if (ps->align != 0 && mod != 0) {
|
if (align != 0 && mod != 0) {
|
||||||
uint32 extra_space = (ps->align - mod);
|
uint32 extra_space = (align - mod);
|
||||||
if(!prs_grow(ps, extra_space))
|
if(!prs_grow(ps, extra_space))
|
||||||
return False;
|
return False;
|
||||||
memset(&ps->data_p[ps->data_offset], '\0', (size_t)extra_space);
|
memset(&ps->data_p[ps->data_offset], '\0', (size_t)extra_space);
|
||||||
@ -257,6 +256,8 @@ BOOL io_uint32(char *name, prs_struct *ps, int depth, uint32 *data32, unsigned f
|
|||||||
|
|
||||||
if (!(flags & PARSE_SCALARS)) return True;
|
if (!(flags & PARSE_SCALARS)) return True;
|
||||||
|
|
||||||
|
if (!prs_align(ps, 4)) return False;
|
||||||
|
|
||||||
q = prs_mem_get(ps, sizeof(uint32));
|
q = prs_mem_get(ps, sizeof(uint32));
|
||||||
if (q == NULL) return False;
|
if (q == NULL) return False;
|
||||||
|
|
||||||
@ -275,6 +276,8 @@ BOOL io_uint16(char *name, prs_struct *ps, int depth, uint16 *data16, unsigned f
|
|||||||
|
|
||||||
if (!(flags & PARSE_SCALARS)) return True;
|
if (!(flags & PARSE_SCALARS)) return True;
|
||||||
|
|
||||||
|
if (!prs_align(ps, 2)) return False;
|
||||||
|
|
||||||
q = prs_mem_get(ps, sizeof(uint16));
|
q = prs_mem_get(ps, sizeof(uint16));
|
||||||
if (q == NULL) return False;
|
if (q == NULL) return False;
|
||||||
|
|
||||||
@ -326,6 +329,8 @@ BOOL io_wstring(char *name, prs_struct *ps, int depth, uint16 *data16s, int len,
|
|||||||
|
|
||||||
if (!(flags & PARSE_SCALARS)) return True;
|
if (!(flags & PARSE_SCALARS)) return True;
|
||||||
|
|
||||||
|
if (!prs_align(ps, 2)) return False;
|
||||||
|
|
||||||
q = prs_mem_get(ps, len * sizeof(uint16));
|
q = prs_mem_get(ps, len * sizeof(uint16));
|
||||||
if (q == NULL) return False;
|
if (q == NULL) return False;
|
||||||
|
|
||||||
|
@ -48,7 +48,6 @@ typedef struct _prs_struct
|
|||||||
* always little-endian.
|
* always little-endian.
|
||||||
*/
|
*/
|
||||||
BOOL bigendian_data;
|
BOOL bigendian_data;
|
||||||
uint8 align; /* data alignment */
|
|
||||||
BOOL is_dynamic; /* Do we own this memory or not ? */
|
BOOL is_dynamic; /* Do we own this memory or not ? */
|
||||||
uint32 data_offset; /* Current working offset into data. */
|
uint32 data_offset; /* Current working offset into data. */
|
||||||
uint32 buffer_size; /* Current size of the buffer. */
|
uint32 buffer_size; /* Current size of the buffer. */
|
||||||
@ -58,9 +57,9 @@ typedef struct _prs_struct
|
|||||||
|
|
||||||
|
|
||||||
char *prs_mem_get(prs_struct *ps, uint32 extra_size);
|
char *prs_mem_get(prs_struct *ps, uint32 extra_size);
|
||||||
BOOL prs_init(prs_struct *ps, uint32 size, uint8 align, BOOL io);
|
BOOL prs_init(prs_struct *ps, uint32 size, BOOL io);
|
||||||
void prs_debug(prs_struct *ps, int depth, char *desc, char *fn_name);
|
void prs_debug(prs_struct *ps, int depth, char *desc, char *fn_name);
|
||||||
BOOL prs_align(prs_struct *ps);
|
BOOL prs_align(prs_struct *ps, int align);
|
||||||
void print_asc(int level, unsigned char *buf,int len);
|
void print_asc(int level, unsigned char *buf,int len);
|
||||||
BOOL prs_read(prs_struct *ps, int fd, size_t len, int timeout);
|
BOOL prs_read(prs_struct *ps, int fd, size_t len, int timeout);
|
||||||
void dump_data(int level,char *buf1,int len);
|
void dump_data(int level,char *buf1,int len);
|
||||||
|
@ -1,5 +1,14 @@
|
|||||||
# build the parse tree for a struct file
|
# build the parse tree for a struct file
|
||||||
|
|
||||||
|
function find_structure(name,
|
||||||
|
LOCAL, i)
|
||||||
|
{
|
||||||
|
for (i=0;i<num_structs;i++) {
|
||||||
|
if (structs[i, "name"] == name) return i;
|
||||||
|
}
|
||||||
|
return "-1";
|
||||||
|
}
|
||||||
|
|
||||||
function start_module(name)
|
function start_module(name)
|
||||||
{
|
{
|
||||||
module=name;
|
module=name;
|
||||||
@ -81,15 +90,119 @@ function start_union(elem)
|
|||||||
unions[current_union, "num_elems"] = 0;
|
unions[current_union, "num_elems"] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function start_union_notencap(switch)
|
||||||
|
{
|
||||||
|
add_struct_elem("uint32", "switch_"switch);
|
||||||
|
start_union("UNKNOWN[switch_"switch"]");
|
||||||
|
}
|
||||||
|
|
||||||
|
function start_union_encap(struct, type, switch, union)
|
||||||
|
{
|
||||||
|
start_struct(struct);
|
||||||
|
add_struct_elem(type, switch);
|
||||||
|
add_struct_elem(type, "switch_"switch);
|
||||||
|
start_union(union"[switch_"switch"]");
|
||||||
|
encap_union="1";
|
||||||
|
}
|
||||||
|
|
||||||
function parse_case(case, type, elem,
|
function parse_case(case, type, elem,
|
||||||
LOCAL, elem_num)
|
LOCAL, elem_num)
|
||||||
{
|
{
|
||||||
|
split(case, a, "[:]");
|
||||||
|
case = a[1];
|
||||||
elem_num = unions[current_union, "num_elems"];
|
elem_num = unions[current_union, "num_elems"];
|
||||||
unions[current_union, elem_num] = add_element(type, elem, case);
|
unions[current_union, elem_num] = add_element(type, elem, case);
|
||||||
unions[current_union, "num_elems"]++;
|
unions[current_union, "num_elems"]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
function end_union()
|
function end_union(name)
|
||||||
{
|
{
|
||||||
|
if (name!="") {
|
||||||
|
elements[current_union, "elem"] = name;
|
||||||
|
}
|
||||||
current_union="";
|
current_union="";
|
||||||
|
if (encap_union=="1") {
|
||||||
|
end_struct(name);
|
||||||
|
encap_union="0";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function delete_element(struct, elnum,
|
||||||
|
LOCAL, i)
|
||||||
|
{
|
||||||
|
for (i=elnum;i<structs[struct,"num_elems"]-1;i++) {
|
||||||
|
structs[struct, i] = structs[struct, i+1];
|
||||||
|
}
|
||||||
|
structs[struct, "num_elems"]--;
|
||||||
|
}
|
||||||
|
|
||||||
|
function copy_struct(from, to,
|
||||||
|
LOCAL, i)
|
||||||
|
{
|
||||||
|
for (i=0;i<structs[from,"num_elems"];i++) {
|
||||||
|
structs[to, i] = structs[from, i];
|
||||||
|
}
|
||||||
|
structs[to, "name"] = structs[from, "name"];
|
||||||
|
structs[to, "num_elems"] = structs[from, "num_elems"];
|
||||||
|
structs[to, "num_unions"] = structs[from, "num_unions"];
|
||||||
|
}
|
||||||
|
|
||||||
|
function add_sizeis_array(count, type, elem)
|
||||||
|
{
|
||||||
|
copy_struct(current_struct, current_struct+1);
|
||||||
|
elem=substr(elem,2);
|
||||||
|
start_struct("array_"current_struct"_"elem);
|
||||||
|
add_struct_elem("uint32", count);
|
||||||
|
add_struct_elem(type, elem"["count"]");
|
||||||
|
end_struct("");
|
||||||
|
current_struct=num_structs;
|
||||||
|
add_struct_elem("array_"current_struct-1"_"elem, "*"elem"_ptr");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function start_function(type, fname)
|
||||||
|
{
|
||||||
|
start_struct(fname);
|
||||||
|
add_function_param("[in,out]",".trailer", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
function end_function(LOCAL, i)
|
||||||
|
{
|
||||||
|
copy_struct(num_structs, num_structs+1);
|
||||||
|
structs[num_structs, "name"] = "Q_"structs[num_structs, "name"];
|
||||||
|
for (i=0;i<structs[num_structs, "num_elems"];i++) {
|
||||||
|
if (match(elements[structs[num_structs, i], "properties"], "in") == 0) {
|
||||||
|
delete_element(num_structs, i);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end_struct();
|
||||||
|
current_struct=num_structs;
|
||||||
|
structs[num_structs, "name"] = "R_"structs[num_structs, "name"];
|
||||||
|
for (i=0;i<structs[num_structs, "num_elems"];i++) {
|
||||||
|
if (match(elements[structs[num_structs, i], "properties"], "out") == 0) {
|
||||||
|
delete_element(num_structs, i);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
add_function_param("[out]", "STATUS", "status");
|
||||||
|
end_struct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function add_function_param(properties, type, elem,
|
||||||
|
LOCAL, elnum, len)
|
||||||
|
{
|
||||||
|
len=length(type);
|
||||||
|
if (substr(type, len) == "*") {
|
||||||
|
type=substr(type, 1, len-1);
|
||||||
|
elem="*"elem;
|
||||||
|
}
|
||||||
|
if (substr(elem,1,1) == "*" &&
|
||||||
|
(match(properties,"in") == 0 ||
|
||||||
|
find_structure(type) != "-1")) {
|
||||||
|
elem=substr(elem, 2);
|
||||||
|
}
|
||||||
|
elnum = add_struct_elem(type, elem);
|
||||||
|
elements[elnum, "properties"] = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
module srvsvc
|
module srvsvc
|
||||||
|
|
||||||
#define BOOL uint32;
|
#define BOOL uint32
|
||||||
#define LONG uint32;
|
#define LONG uint32
|
||||||
#define DWORD uint32;
|
#define DWORD uint32
|
||||||
#define STATUS uint32;
|
#define STATUS uint32
|
||||||
|
|
||||||
typedef struct _UNISTR2 {
|
typedef struct _UNISTR2 {
|
||||||
uint32 max_len;
|
uint32 max_len;
|
||||||
@ -16,6 +16,8 @@ struct LPWSTR {
|
|||||||
UNISTR2 *str;
|
UNISTR2 *str;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* -- CHARACTER DEVICE INFORMATION -- */
|
/* -- CHARACTER DEVICE INFORMATION -- */
|
||||||
|
|
||||||
typedef struct _CHARDEV_INFO_0 {
|
typedef struct _CHARDEV_INFO_0 {
|
||||||
@ -29,64 +31,289 @@ struct LPWSTR {
|
|||||||
DWORD dwTime;
|
DWORD dwTime;
|
||||||
} CHARDEV_INFO_1;
|
} CHARDEV_INFO_1;
|
||||||
|
|
||||||
typedef struct _CHARDEV_INFO {
|
typedef union _CHARDEV_INFO switch (DWORD dwLevel) ctr {
|
||||||
DWORD dwLevel;
|
case 1: CHARDEV_INFO_0 *ci0;
|
||||||
union ctr[dwLevel] {
|
case 2: CHARDEV_INFO_1 *ci1;
|
||||||
case 1 CHARDEV_INFO_0 *ci0;
|
|
||||||
case 2 CHARDEV_INFO_1 *ci1;
|
|
||||||
}
|
|
||||||
} CHARDEV_INFO;
|
} CHARDEV_INFO;
|
||||||
|
|
||||||
typedef struct _CHARDEV_ENUM_0 {
|
typedef struct _CHARDEV_ENUM_0 {
|
||||||
DWORD dwEntries;
|
DWORD dwEntries;
|
||||||
CHARDEV_INFO_0 ci0[dwEntries];
|
[size_is(dwEntries)] CHARDEV_INFO_0 *ci0;
|
||||||
} CHARDEV_ENUM_0;
|
} CHARDEV_ENUM_0;
|
||||||
|
|
||||||
typedef struct _CHARDEV_ENUM_1 {
|
typedef struct _CHARDEV_ENUM_1 {
|
||||||
DWORD dwEntries;
|
DWORD dwEntries;
|
||||||
CHARDEV_INFO_1 ci1[dwEntries];
|
[size_is(dwEntries)] CHARDEV_INFO_1 *ci1;
|
||||||
} CHARDEV_ENUM_1;
|
} CHARDEV_ENUM_1;
|
||||||
|
|
||||||
typedef struct _CHARDEV_ENUM {
|
typedef struct _CHARDEV_ENUM {
|
||||||
DWORD dwLevel;
|
DWORD dwLevel;
|
||||||
union ctr[dwLevel] {
|
[switch_is(dwLevel)] union {
|
||||||
case 0 CHARDEV_ENUM_0 *ce0;
|
[case(0)] CHARDEV_ENUM_0 *ce0;
|
||||||
case 1 CHARDEV_ENUM_1 *ce1;
|
[case(1)] CHARDEV_ENUM_1 *ce1;
|
||||||
}
|
} ctr;
|
||||||
} CHARDEV_ENUM;
|
} CHARDEV_ENUM;
|
||||||
|
|
||||||
struct Q_NetrCharDevEnum {
|
STATUS NetrCharDevEnum( /* Function 0x00 */
|
||||||
.trailer;
|
[in,unique] LPWSTR pszServer,
|
||||||
LPWSTR pszServer;
|
[in,out] CHARDEV_ENUM* pCharDevEnum,
|
||||||
CHARDEV_ENUM *pCharDevEnum;
|
[in] DWORD dwMaxLen,
|
||||||
DWORD dwMaxLen;
|
[out] DWORD* dwEntries,
|
||||||
DWORD *hResume;
|
[in,out] DWORD* hResume
|
||||||
};
|
);
|
||||||
|
|
||||||
struct R_NetrCharDevEnum {
|
STATUS NetrCharDevGetInfo( /* Function 0x01 */
|
||||||
CHARDEV_ENUM *pCharDevEnum;
|
[in,unique] LPWSTR pszServer,
|
||||||
DWORD *dwEntries;
|
[in,ref] LPWSTR pszDevice,
|
||||||
DWORD *hResume;
|
[in] DWORD dwLevel,
|
||||||
.trailer;
|
[out] CHARDEV_INFO* pCharDevInfo
|
||||||
STATUS status;
|
);
|
||||||
};
|
|
||||||
|
|
||||||
|
STATUS NetrCharDevControl( /* Function 0x02 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszDevice,
|
||||||
|
[in] DWORD dwOpcode
|
||||||
|
);
|
||||||
|
|
||||||
|
/* -- CHARACTER DEVICE QUEUE INFORMATION -- */
|
||||||
|
|
||||||
|
typedef struct _CHARDEVQ_INFO_0 {
|
||||||
|
LPWSTR pszName;
|
||||||
|
} CHARDEVQ_INFO_0;
|
||||||
|
|
||||||
# STATUS NetrCharDevGetInfo( /* Function 0x01 */
|
typedef struct _CHARDEVQ_INFO_1 {
|
||||||
# [in,unique] LPWSTR pszServer,
|
LPWSTR pszName;
|
||||||
# [in,ref] LPWSTR pszDevice,
|
DWORD dwPriority;
|
||||||
# [in] DWORD dwLevel,
|
LPWSTR pszDevices;
|
||||||
# [out] CHARDEV_INFO* pCharDevInfo
|
DWORD dwNumUsers;
|
||||||
# );
|
DWORD dwNumAhead;
|
||||||
|
} CHARDEVQ_INFO_1;
|
||||||
|
|
||||||
# STATUS NetrCharDevControl( /* Function 0x02 */
|
typedef union _CHARDEVQ_INFO switch (DWORD dwLevel) ctr {
|
||||||
# [in,unique] LPWSTR pszServer,
|
case 1: CHARDEVQ_INFO_0 *ci0;
|
||||||
# [in,ref] LPWSTR pszDevice,
|
case 2: CHARDEVQ_INFO_1 *ci1;
|
||||||
# [in] DWORD dwOpcode
|
} CHARDEVQ_INFO;
|
||||||
# );
|
|
||||||
|
|
||||||
|
typedef struct _CHARDEVQ_ENUM_0 {
|
||||||
|
DWORD dwEntries;
|
||||||
|
[size_is(dwEntries)] CHARDEVQ_INFO_0 *ci0;
|
||||||
|
} CHARDEVQ_ENUM_0;
|
||||||
|
|
||||||
|
typedef struct _CHARDEVQ_ENUM_1 {
|
||||||
|
DWORD dwEntries;
|
||||||
|
[size_is(dwEntries)] CHARDEVQ_INFO_1 *ci1;
|
||||||
|
} CHARDEVQ_ENUM_1;
|
||||||
|
|
||||||
|
typedef struct _CHARDEVQ_ENUM {
|
||||||
|
DWORD dwLevel;
|
||||||
|
[switch_is(dwLevel)] union {
|
||||||
|
[case(0)] CHARDEVQ_ENUM_0 *ce0;
|
||||||
|
[case(1)] CHARDEVQ_ENUM_1 *ce1;
|
||||||
|
} ctr;
|
||||||
|
} CHARDEVQ_ENUM;
|
||||||
|
|
||||||
|
STATUS NetrCharDevQEnum( /* Function 0x03 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,unique] LPWSTR pszUser,
|
||||||
|
[in,out] CHARDEVQ_ENUM* pCharDevQEnum,
|
||||||
|
[in] DWORD dwMaxLen,
|
||||||
|
[out] DWORD* dwEntries,
|
||||||
|
[in,out] DWORD* hResume
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrCharDevQGetInfo( /* Function 0x04 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszQueue,
|
||||||
|
[in,ref] LPWSTR pszUser,
|
||||||
|
[in] DWORD dwLevel,
|
||||||
|
[out] CHARDEVQ_INFO* pCharDevQInfo
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrCharDevQSetInfo( /* Function 0x05 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszQueue,
|
||||||
|
[in] DWORD dwLevel,
|
||||||
|
[in] CHARDEVQ_INFO* pCharDevQInfo,
|
||||||
|
[in,out] DWORD* dwParmError
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrCharDevQPurge( /* Function 0x06 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszQueue
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrCharDevQPurgeSelf( /* Function 0x07 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszQueue,
|
||||||
|
[in,ref] LPWSTR pszComputer
|
||||||
|
);
|
||||||
|
|
||||||
|
/* -- CONNECTION INFORMATION -- */
|
||||||
|
|
||||||
|
typedef struct _CONNECTION_INFO_0 {
|
||||||
|
DWORD dwConnID;
|
||||||
|
} CONNECTION_INFO_0;
|
||||||
|
|
||||||
|
typedef struct _CONNECTION_INFO_1 {
|
||||||
|
DWORD dwConnID;
|
||||||
|
DWORD dwType;
|
||||||
|
DWORD dwNumOpens;
|
||||||
|
DWORD dwNumUsers;
|
||||||
|
DWORD dwTime;
|
||||||
|
LPWSTR pszUser;
|
||||||
|
LPWSTR pszShare;
|
||||||
|
} CONNECTION_INFO_1;
|
||||||
|
|
||||||
|
typedef struct _CONNECTION_ENUM_0 {
|
||||||
|
DWORD dwEntries;
|
||||||
|
[size_is(dwEntries)] CONNECTION_INFO_0 *ci0;
|
||||||
|
} CONNECTION_ENUM_0;
|
||||||
|
|
||||||
|
typedef struct _CONNECTION_ENUM_1 {
|
||||||
|
DWORD dwEntries;
|
||||||
|
[size_is(dwEntries)] CONNECTION_INFO_1 *ci1;
|
||||||
|
} CONNECTION_ENUM_1;
|
||||||
|
|
||||||
|
typedef struct _CONNECTION_ENUM {
|
||||||
|
DWORD dwLevel;
|
||||||
|
[switch_is(dwLevel)] union {
|
||||||
|
[case(0)] CONNECTION_ENUM_0 *ce0;
|
||||||
|
[case(1)] CONNECTION_ENUM_1 *ce1;
|
||||||
|
} ctr;
|
||||||
|
} CONNECTION_ENUM;
|
||||||
|
|
||||||
|
STATUS NetrConnectionEnum( /* Function 0x08 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,unique] LPWSTR pszClient,
|
||||||
|
[in,out] CONNECTION_ENUM* pConnectionEnum,
|
||||||
|
[in] DWORD dwMaxLen,
|
||||||
|
[out] DWORD* dwEntries,
|
||||||
|
[in,out] DWORD* hResume
|
||||||
|
);
|
||||||
|
|
||||||
|
/* -- FILE INFORMATION -- */
|
||||||
|
|
||||||
|
typedef struct _FILE_INFO_2 {
|
||||||
|
DWORD dwFileID;
|
||||||
|
} FILE_INFO_2;
|
||||||
|
|
||||||
|
typedef struct _FILE_INFO_3 {
|
||||||
|
DWORD dwFileID;
|
||||||
|
DWORD dwPermissions;
|
||||||
|
DWORD dwNumLocks;
|
||||||
|
LPWSTR pszPath;
|
||||||
|
LPWSTR pszUser;
|
||||||
|
} FILE_INFO_3;
|
||||||
|
|
||||||
|
typedef union _FILE_INFO switch (DWORD dwLevel) ctr {
|
||||||
|
case 2: FILE_INFO_2 *fi2;
|
||||||
|
case 3: FILE_INFO_3 *fi3;
|
||||||
|
} FILE_INFO;
|
||||||
|
|
||||||
|
typedef struct _FILE_ENUM_2 {
|
||||||
|
DWORD dwEntries;
|
||||||
|
[size_is(dwEntries)] FILE_INFO_2 *fi2;
|
||||||
|
} FILE_ENUM_2;
|
||||||
|
|
||||||
|
typedef struct _FILE_ENUM_3 {
|
||||||
|
DWORD dwEntries;
|
||||||
|
[size_is(dwEntries)] FILE_INFO_3 *fi3;
|
||||||
|
} FILE_ENUM_3;
|
||||||
|
|
||||||
|
typedef struct _FILE_ENUM {
|
||||||
|
DWORD dwLevel;
|
||||||
|
[switch_is(dwLevel)] union {
|
||||||
|
[case(2)] FILE_ENUM_2 *fe2;
|
||||||
|
[case(3)] FILE_ENUM_3 *fe3;
|
||||||
|
} ctr;
|
||||||
|
} FILE_ENUM;
|
||||||
|
|
||||||
|
STATUS NetrFileEnum( /* Function 0x09 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,unique] LPWSTR pszBasePath,
|
||||||
|
[in,unique] LPWSTR pszUser,
|
||||||
|
[in,out] FILE_ENUM* pFileEnum,
|
||||||
|
[in] DWORD dwMaxLen,
|
||||||
|
[out] DWORD* dwEntries,
|
||||||
|
[in,out] DWORD* hResume
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrFileGetInfo( /* Function 0x0A */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in] DWORD dwFileID,
|
||||||
|
[in] DWORD dwLevel,
|
||||||
|
[out] FILE_INFO* pFileInfo
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrFileClose( /* Function 0x0B */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in] DWORD dwFileID
|
||||||
|
);
|
||||||
|
|
||||||
|
/* -- SESSION INFORMATION -- */
|
||||||
|
|
||||||
|
typedef struct _SESSION_INFO_0 {
|
||||||
|
LPWSTR pszClient;
|
||||||
|
} SESSION_INFO_0;
|
||||||
|
|
||||||
|
typedef struct _SESSION_INFO_1 {
|
||||||
|
LPWSTR pszClient;
|
||||||
|
LPWSTR pszUser;
|
||||||
|
DWORD dwOpens;
|
||||||
|
DWORD dwTime;
|
||||||
|
DWORD dwIdleTime;
|
||||||
|
DWORD dwUserFlags;
|
||||||
|
} SESSION_INFO_1;
|
||||||
|
|
||||||
|
typedef struct _SESSION_INFO_2 {
|
||||||
|
LPWSTR pszClient;
|
||||||
|
LPWSTR pszUser;
|
||||||
|
DWORD dwOpens;
|
||||||
|
DWORD dwTime;
|
||||||
|
DWORD dwIdleTime;
|
||||||
|
DWORD dwUserFlags;
|
||||||
|
LPWSTR pszClientType;
|
||||||
|
} SESSION_INFO_2;
|
||||||
|
|
||||||
|
typedef struct _SESSION_ENUM_0 {
|
||||||
|
DWORD dwEntries;
|
||||||
|
[size_is(dwEntries)] SESSION_INFO_0 *si0;
|
||||||
|
} SESSION_ENUM_0;
|
||||||
|
|
||||||
|
typedef struct _SESSION_ENUM_1 {
|
||||||
|
DWORD dwEntries;
|
||||||
|
[size_is(dwEntries)] SESSION_INFO_1 *si1;
|
||||||
|
} SESSION_ENUM_1;
|
||||||
|
|
||||||
|
typedef struct _SESSION_ENUM_2 {
|
||||||
|
DWORD dwEntries;
|
||||||
|
[size_is(dwEntries)] SESSION_INFO_2 *si2;
|
||||||
|
} SESSION_ENUM_2;
|
||||||
|
|
||||||
|
typedef struct _SESSION_ENUM {
|
||||||
|
DWORD dwLevel;
|
||||||
|
[switch_is(dwLevel)] union {
|
||||||
|
[case(0)] SESSION_ENUM_0 *se0;
|
||||||
|
[case(1)] SESSION_ENUM_1 *se1;
|
||||||
|
[case(2)] SESSION_ENUM_2 *se2;
|
||||||
|
} ctr;
|
||||||
|
} SESSION_ENUM;
|
||||||
|
|
||||||
|
STATUS NetrSessionEnum( /* Function 0x0C */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,unique] LPWSTR pszClient,
|
||||||
|
[in,unique] LPWSTR pszUser,
|
||||||
|
[in,out] SESSION_ENUM* pFileEnum,
|
||||||
|
[in] DWORD dwMaxLen,
|
||||||
|
[out] DWORD* dwEntries,
|
||||||
|
[in,out] DWORD* hResume
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrSessionDel( /* Function 0x0D */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszClient,
|
||||||
|
[in,ref] LPWSTR pszUser
|
||||||
|
);
|
||||||
|
|
||||||
/* -- SHARE INFORMATION -- */
|
/* -- SHARE INFORMATION -- */
|
||||||
|
|
||||||
@ -111,58 +338,83 @@ struct LPWSTR {
|
|||||||
LPWSTR pszPasswd;
|
LPWSTR pszPasswd;
|
||||||
} SHARE_INFO_2;
|
} SHARE_INFO_2;
|
||||||
|
|
||||||
typedef struct _SHARE_INFO {
|
typedef union _SHARE_INFO switch (DWORD dwLevel) ctr {
|
||||||
DWORD dwLevel;
|
case 0: SHARE_INFO_0 *si0;
|
||||||
union ctr[dwLevel] {
|
case 1: SHARE_INFO_1 *si1;
|
||||||
case 0 SHARE_INFO_0 *si0;
|
case 2: SHARE_INFO_2 *si2;
|
||||||
case 1 SHARE_INFO_1 *si1;
|
|
||||||
case 2 SHARE_INFO_2 *si2;
|
|
||||||
}
|
|
||||||
} SHARE_INFO;
|
} SHARE_INFO;
|
||||||
|
|
||||||
typedef struct _SHARE_ENUM_0 {
|
typedef struct _SHARE_ENUM_0 {
|
||||||
DWORD dwEntries;
|
DWORD dwEntries;
|
||||||
SHARE_INFO_0 si0[dwEntries];
|
[size_is(dwEntries)] SHARE_INFO_0 *si0;
|
||||||
} SHARE_ENUM_0;
|
} SHARE_ENUM_0;
|
||||||
|
|
||||||
typedef struct _SHARE_ENUM_1 {
|
typedef struct _SHARE_ENUM_1 {
|
||||||
DWORD dwEntries;
|
DWORD dwEntries;
|
||||||
SHARE_INFO_1 si1[dwEntries];
|
[size_is(dwEntries)] SHARE_INFO_1 *si1;
|
||||||
} SHARE_ENUM_1;
|
} SHARE_ENUM_1;
|
||||||
|
|
||||||
typedef struct _SHARE_ENUM_2 {
|
typedef struct _SHARE_ENUM_2 {
|
||||||
DWORD dwEntries;
|
DWORD dwEntries;
|
||||||
SHARE_INFO_2 si2[dwEntries];
|
[size_is(dwEntries)] SHARE_INFO_2 *si2;
|
||||||
} SHARE_ENUM_2;
|
} SHARE_ENUM_2;
|
||||||
|
|
||||||
typedef struct _SHARE_ENUM {
|
typedef struct _SHARE_ENUM {
|
||||||
DWORD dwLevel;
|
DWORD dwLevel;
|
||||||
union ctr[dwLevel] {
|
[switch_is(dwLevel)] union {
|
||||||
case 0 SHARE_ENUM_0 *se0;
|
[case(0)] SHARE_ENUM_0 *se0;
|
||||||
case 1 SHARE_ENUM_1 *se1;
|
[case(1)] SHARE_ENUM_1 *se1;
|
||||||
case 2 SHARE_ENUM_2 *se2;
|
[case(2)] SHARE_ENUM_2 *se2;
|
||||||
}
|
} ctr;
|
||||||
} SHARE_ENUM;
|
} SHARE_ENUM;
|
||||||
|
|
||||||
struct Q_NetrShareEnum {
|
STATUS NetrShareAdd( /* Function 0x0E */
|
||||||
.trailer;
|
[in,unique] LPWSTR pszServer,
|
||||||
LPWSTR pszServer;
|
[in] DWORD dwLevel,
|
||||||
uint32 level;
|
[out] SHARE_INFO* pShareInfo,
|
||||||
SHARE_ENUM pShareEnum;
|
[in,out] DWORD* dwParmError
|
||||||
DWORD *hResume;
|
);
|
||||||
DWORD dwMaxLen;
|
|
||||||
DWORD dummy;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct R_NetrShareEnum {
|
STATUS NetrShareEnum( /* Function 0x0F */
|
||||||
DWORD level;
|
[in,unique] LPWSTR pszServer,
|
||||||
SHARE_ENUM pShareEnum;
|
[in,out] SHARE_ENUM* pShareEnum,
|
||||||
DWORD *dwEntries;
|
[in] DWORD dwMaxLen,
|
||||||
DWORD *hResume;
|
[out] DWORD* dwEntries,
|
||||||
.trailer;
|
[in,out] DWORD* hResume
|
||||||
STATUS status;
|
);
|
||||||
};
|
|
||||||
|
|
||||||
|
STATUS NetrShareGetInfo( /* Function 0x10 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszShare,
|
||||||
|
[in] DWORD dwLevel,
|
||||||
|
[out] SHARE_INFO* pShareInfo
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrShareSetInfo( /* Function 0x11 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszShare,
|
||||||
|
[in] DWORD dwLevel,
|
||||||
|
[in] SHARE_INFO* pShareInfo,
|
||||||
|
[in] DWORD dwReserved
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrShareDel( /* Function 0x12 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszShare,
|
||||||
|
[in] DWORD dwReserved
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrShareDelSticky( /* Function 0x13 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszShare,
|
||||||
|
[in] DWORD dwReserved
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrShareCheck( /* Function 0x14 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszDevice,
|
||||||
|
[out] DWORD* dwType
|
||||||
|
);
|
||||||
|
|
||||||
/* --- SERVER INFORMATION --- */
|
/* --- SERVER INFORMATION --- */
|
||||||
|
|
||||||
@ -196,70 +448,203 @@ struct LPWSTR {
|
|||||||
LPWSTR pszUserPath;
|
LPWSTR pszUserPath;
|
||||||
} SERVER_INFO_102;
|
} SERVER_INFO_102;
|
||||||
|
|
||||||
typedef struct _SERVER_INFO {
|
typedef union _SERVER_INFO switch (DWORD dwLevel) ctr {
|
||||||
DWORD dwLevel;
|
case 100: SERVER_INFO_100 *sv100;
|
||||||
union ctr[dwLevel] {
|
case 101: SERVER_INFO_101 *sv101;
|
||||||
case 100 SERVER_INFO_100 *sv100;
|
case 102: SERVER_INFO_102 *sv102;
|
||||||
case 101 SERVER_INFO_101 *sv101;
|
|
||||||
case 102 SERVER_INFO_102 *sv102;
|
|
||||||
}
|
|
||||||
} SERVER_INFO;
|
} SERVER_INFO;
|
||||||
|
|
||||||
struct Q_NetrServerGetInfo {
|
STATUS NetrServerGetInfo( /* Function 0x15 */
|
||||||
.trailer;
|
[in,unique] LPWSTR pszServerName,
|
||||||
LPWSTR pszServerName;
|
[in] DWORD dwLevel,
|
||||||
DWORD dwLevel;
|
[out] SERVER_INFO* pServerInfo
|
||||||
};
|
);
|
||||||
|
|
||||||
struct R_NetrServerGetInfo {
|
STATUS NetrServerSetInfo( /* Function 0x16 */
|
||||||
SERVER_INFO pServerInfo;
|
[in,unique] LPWSTR pszServerName,
|
||||||
.trailer;
|
[in] DWORD dwLevel,
|
||||||
STATUS status;
|
[in] SERVER_INFO* pServerInfo,
|
||||||
};
|
[in] DWORD dwReserved
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef struct _DISK_INFO {
|
||||||
|
LPWSTR pszName;
|
||||||
|
} DISK_INFO;
|
||||||
|
|
||||||
|
typedef struct _DISK_ENUM {
|
||||||
|
DWORD dwEntries;
|
||||||
|
[size_is(dwEntries)] DISK_INFO *di;
|
||||||
|
} DISK_ENUM;
|
||||||
|
|
||||||
|
STATUS NetrServerDiskEnum( /* Function 0x17 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in] DWORD dwLevel,
|
||||||
|
[in,out] DISK_ENUM* pDiskEnum,
|
||||||
|
[in] DWORD dwMaxLen,
|
||||||
|
[out] DWORD* dwEntries,
|
||||||
|
[in,out] DWORD* hResume
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef struct _STAT_SERVER {
|
||||||
|
DWORD dwStart;
|
||||||
|
DWORD dwFOpens;
|
||||||
|
DWORD dwDevOpens;
|
||||||
|
DWORD dwJobsQueued;
|
||||||
|
DWORD dwSOpens;
|
||||||
|
DWORD dwSTimedOut;
|
||||||
|
DWORD dwSErrors;
|
||||||
|
DWORD dwPWErrors;
|
||||||
|
DWORD dwPermErrors;
|
||||||
|
DWORD dwSysErrors;
|
||||||
|
DWORD dwBytesSentLow;
|
||||||
|
DWORD dwBytesSentHigh;
|
||||||
|
DWORD dwBytesRcvdLow;
|
||||||
|
DWORD dwBytesRcvdHigh;
|
||||||
|
DWORD dwAVResponse;
|
||||||
|
DWORD dwReqBufNeed;
|
||||||
|
DWORD dwBigBufNeed;
|
||||||
|
} STAT_SERVER;
|
||||||
|
|
||||||
|
STATUS NetrServerStatisticsGet( /* Function 0x18 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in] DWORD dwLevel,
|
||||||
|
[in] DWORD dwOptions,
|
||||||
|
[out] STAT_SERVER* pStatServer
|
||||||
|
);
|
||||||
|
|
||||||
typedef struct _TRANSPORT_INFO_0 {
|
typedef struct _TRANSPORT_INFO_0 {
|
||||||
LPWSTR pszName;
|
LPWSTR pszName;
|
||||||
} TRANSPORT_INFO_0;
|
} TRANSPORT_INFO_0;
|
||||||
|
|
||||||
typedef struct _TRANSPORT_INFO {
|
typedef union _TRANSPORT_INFO switch (DWORD dwLevel) ctr {
|
||||||
DWORD dwLevel;
|
case 0: TRANSPORT_INFO_0 *ti0;
|
||||||
union ctr[dwLevel] {
|
|
||||||
case 0 TRANSPORT_INFO_0 *ti0;
|
|
||||||
}
|
|
||||||
} TRANSPORT_INFO;
|
} TRANSPORT_INFO;
|
||||||
|
|
||||||
typedef struct _TRANSPORT_ENUM_0 {
|
typedef struct _TRANSPORT_ENUM_0 {
|
||||||
DWORD level;
|
DWORD dwEntries;
|
||||||
DWORD dwEntries;
|
[size_is(dwEntries)] TRANSPORT_INFO_0 *ti0;
|
||||||
TRANSPORT_INFO_0 ti0[dwEntries];
|
|
||||||
} TRANSPORT_ENUM_0;
|
} TRANSPORT_ENUM_0;
|
||||||
|
|
||||||
typedef struct _TRANSPORT_ENUM {
|
typedef struct _TRANSPORT_ENUM {
|
||||||
DWORD dwLevel;
|
DWORD dwLevel;
|
||||||
DWORD dummy;
|
[switch_is(dwLevel)] union {
|
||||||
union ctr[dwLevel] {
|
[case(0)] TRANSPORT_ENUM_0 *te0;
|
||||||
case 0 TRANSPORT_ENUM_0 *te0;
|
} ctr;
|
||||||
}
|
|
||||||
} TRANSPORT_ENUM;
|
} TRANSPORT_ENUM;
|
||||||
|
|
||||||
|
STATUS NetrServerTransportAdd( /* Function 0x19 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in] DWORD dwLevel,
|
||||||
|
[out] TRANSPORT_INFO* pTransportInfo
|
||||||
|
);
|
||||||
|
|
||||||
struct Q_NetrServerTransportEnum {
|
STATUS NetrServerTransportEnum( /* Function 0x1a */
|
||||||
.trailer;
|
[in,unique] LPWSTR pszServer,
|
||||||
LPWSTR pszServer;
|
[in,out] TRANSPORT_ENUM* pTransportEnum,
|
||||||
TRANSPORT_ENUM pTransportEnum;
|
[in] DWORD dwMaxLen,
|
||||||
DWORD dwMaxLen;
|
[out] DWORD* dwEntries,
|
||||||
LPWSTR server2;
|
[in,out] DWORD* hResume
|
||||||
DWORD *hResume;
|
);
|
||||||
DWORD preferred_length;
|
|
||||||
STATUS *status;
|
STATUS NetrServerTransportDel( /* Function 0x1b */
|
||||||
};
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in] DWORD dwLevel,
|
||||||
|
[out] TRANSPORT_INFO* pTransportInfo
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef struct _TIME_OF_DAY {
|
||||||
|
DWORD dwElapsedTime;
|
||||||
|
DWORD dwMsecs;
|
||||||
|
DWORD dwHours;
|
||||||
|
DWORD dwMins;
|
||||||
|
DWORD dwSecs;
|
||||||
|
DWORD dwHunds;
|
||||||
|
LONG lTimeZone;
|
||||||
|
DWORD dwInterval;
|
||||||
|
DWORD dwDay;
|
||||||
|
DWORD dwMonth;
|
||||||
|
DWORD dwYear;
|
||||||
|
DWORD dwWeekday;
|
||||||
|
} TIME_OF_DAY;
|
||||||
|
|
||||||
|
STATUS NetrRemoteTOD( /* Function 0x1c */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[out] TIME_OF_DAY* pTOD
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrServerSetServiceBits( /* Function 0x1d */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in] DWORD hServiceStatus, /* ?? */
|
||||||
|
[in] DWORD dwServiceBits,
|
||||||
|
[in] BOOL bSetBitsOn,
|
||||||
|
[in] BOOL bUpdateImmediately
|
||||||
|
);
|
||||||
|
|
||||||
|
/* --- PATH INFORMATION --- */
|
||||||
|
|
||||||
|
STATUS NetprPathType( /* Function 0x1e */
|
||||||
|
void /* Not known */
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetprPathCanonicalize( /* Function 0x1f */
|
||||||
|
void /* Not known */
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetprPathCompare( /* Function 0x20 */
|
||||||
|
void /* Not known */
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetprNameValidate( /* Function 0x21 */
|
||||||
|
void /* Not known */
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetprNameCanonicalize( /* Function 0x22 */
|
||||||
|
void /* Not known */
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetprNameCompare( /* Function 0x23 */
|
||||||
|
void /* Not known */
|
||||||
|
);
|
||||||
|
|
||||||
|
/* --- LATER ADDITIONS --- */
|
||||||
|
|
||||||
|
STATUS NetrShareEnumSticky( /* Function 0x24 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,out] SHARE_ENUM* pShareEnum,
|
||||||
|
[in] DWORD dwMaxLen,
|
||||||
|
[out] DWORD* dwEntries,
|
||||||
|
[in,out] DWORD* hResume
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrShareDelStart( /* Function 0x25 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in,ref] LPWSTR pszShare,
|
||||||
|
[in] DWORD dwReserved /* ? */
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrShareDelCommit( /* Function 0x26 */
|
||||||
|
[in,unique] LPWSTR pszServer
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrpGetFileSecurity( /* Function 0x27 */
|
||||||
|
void /* Not known */
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrpSetFileSecurity( /* Function 0x28 */
|
||||||
|
void /* Not known */
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrServerTransportAddEx( /* Function 0x29 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in] DWORD dwLevel,
|
||||||
|
[out] TRANSPORT_INFO* pTransportInfo
|
||||||
|
);
|
||||||
|
|
||||||
|
STATUS NetrServerSetServiceBitsEx( /* Function 0x30 */
|
||||||
|
[in,unique] LPWSTR pszServer,
|
||||||
|
[in] DWORD hServiceStatus, /* ?? */
|
||||||
|
[in] DWORD dwServiceBits,
|
||||||
|
[in] BOOL bSetBitsOn,
|
||||||
|
[in] BOOL bUpdateImmediately
|
||||||
|
);
|
||||||
|
|
||||||
struct R_NetrServerTransportEnum {
|
|
||||||
DWORD level;
|
|
||||||
TRANSPORT_ENUM pTransportEnum;
|
|
||||||
DWORD *dwEntries;
|
|
||||||
DWORD *hResume;
|
|
||||||
.trailer;
|
|
||||||
STATUS status;
|
|
||||||
};
|
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
end:
|
end:
|
||||||
/* the parse is OK, just align and end */
|
/* the parse is OK */
|
||||||
if (!prs_align(ps)) goto fail;
|
|
||||||
|
|
||||||
return True;
|
return True;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
@ -10,7 +10,7 @@ function parse_error(msg) {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/^\#define.*;/ {
|
/^\#define.*/ {
|
||||||
split($0,a,"[ \t;]*");
|
split($0,a,"[ \t;]*");
|
||||||
parse_define(a[2], a[3]);
|
parse_define(a[2], a[3]);
|
||||||
next;
|
next;
|
||||||
@ -46,6 +46,20 @@ function parse_error(msg) {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/^[ \t]*typedef union.*\{/ {
|
||||||
|
{if (current_struct!="") parse_error("this cannot appear inside a structure");}
|
||||||
|
split($0,a,"[ \t;()]*");
|
||||||
|
start_union_encap(a[4], a[6], a[7], a[8]);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/^[ \t]*STATUS.*\(/ {
|
||||||
|
{if (current_struct!="") parse_error("you cannot have nested structures");}
|
||||||
|
split($0,a,"[ \t;()]*");
|
||||||
|
start_function(a[2], a[3]);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
{if (current_struct=="") parse_error("this must appear inside a structure");}
|
{if (current_struct=="") parse_error("this must appear inside a structure");}
|
||||||
|
|
||||||
/^[ \t]*union.*\{/ {
|
/^[ \t]*union.*\{/ {
|
||||||
@ -54,6 +68,13 @@ function parse_error(msg) {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/^[ \t]*\[switch_is.*union.*\{/ {
|
||||||
|
{if (current_union!="") parse_error("you cannot have nested unions");}
|
||||||
|
split($0,a,"[ \t;()]*");
|
||||||
|
start_union_notencap(a[3]);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
/^[ \t]*case.*;/ {
|
/^[ \t]*case.*;/ {
|
||||||
{if (current_union=="") parse_error("this must appear inide a union");}
|
{if (current_union=="") parse_error("this must appear inide a union");}
|
||||||
split($0,a,"[ \t;]*");
|
split($0,a,"[ \t;]*");
|
||||||
@ -61,12 +82,27 @@ function parse_error(msg) {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/^[ \t]*\[case(.*)\].*;/ {
|
||||||
|
{if (current_union=="") parse_error("this must appear inide a union");}
|
||||||
|
split($0,a,"[ \t;()[\]]*");
|
||||||
|
parse_case(a[6],a[8],a[9]);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
/^[ \t]*\}$/ {
|
/^[ \t]*\}$/ {
|
||||||
{if (current_union=="") parse_error("this must appear inside a union");}
|
{if (current_union=="") parse_error("this must appear inside a union");}
|
||||||
end_union();
|
end_union("");
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/^[ \t]*\} .*;/ {
|
||||||
|
if (current_union!="") {
|
||||||
|
split($2,a,"[ \t;]*");
|
||||||
|
end_union(a[1]);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
{if (current_union!="") parse_error("this cannot appear inside a union");}
|
{if (current_union!="") parse_error("this cannot appear inside a union");}
|
||||||
|
|
||||||
/^[ \t]*\};/ {
|
/^[ \t]*\};/ {
|
||||||
@ -80,12 +116,35 @@ function parse_error(msg) {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/^[ \t]*\);/ {
|
||||||
|
end_function();
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/^.*size_is.*\*.*;/ {
|
||||||
|
split($0,a,"[ \t;()]*");
|
||||||
|
add_sizeis_array(a[3], a[5], a[6]);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
/^.*;/ {
|
/^.*;/ {
|
||||||
split($0,a,"[ \t;]*");
|
split($0,a,"[ \t;]*");
|
||||||
add_struct_elem(a[2], a[3]);
|
add_struct_elem(a[2], a[3]);
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/^[\t ]*void/ {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/^[ \t]*\[.*\].*/ {
|
||||||
|
split($0,a,"[ \t;]*");
|
||||||
|
split(a[4], b, "[,]");
|
||||||
|
add_function_param(a[2], a[3], b[1]);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
parse_error("Unknown construct.");
|
parse_error("Unknown construct.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
fstat(fd, &st);
|
fstat(fd, &st);
|
||||||
|
|
||||||
prs_init(&ps, 0, 4, MARSHALL);
|
prs_init(&ps, 0, MARSHALL);
|
||||||
ps.is_dynamic=True;
|
ps.is_dynamic=True;
|
||||||
prs_read(&ps, fd, st.st_size, 0);
|
prs_read(&ps, fd, st.st_size, 0);
|
||||||
ps.data_offset = 0;
|
ps.data_offset = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user