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
|
||||
|
||||
echo compiling vluke
|
||||
gcc -Wall -g -o vluke parser.c vluke.c
|
||||
gcc -Wall -o vluke parser.c vluke.c
|
||||
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.
|
||||
********************************************************************/
|
||||
|
||||
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);
|
||||
ps->io = io;
|
||||
ps->bigendian_data = False;
|
||||
ps->align = align;
|
||||
ps->is_dynamic = False;
|
||||
ps->data_offset = 0;
|
||||
ps->buffer_size = 0;
|
||||
@ -168,12 +167,12 @@ void prs_debug(prs_struct *ps, int depth, char *desc, char *fn_name)
|
||||
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) {
|
||||
uint32 extra_space = (ps->align - mod);
|
||||
if (align != 0 && mod != 0) {
|
||||
uint32 extra_space = (align - mod);
|
||||
if(!prs_grow(ps, extra_space))
|
||||
return False;
|
||||
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 (!prs_align(ps, 4)) return False;
|
||||
|
||||
q = prs_mem_get(ps, sizeof(uint32));
|
||||
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 (!prs_align(ps, 2)) return False;
|
||||
|
||||
q = prs_mem_get(ps, sizeof(uint16));
|
||||
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 (!prs_align(ps, 2)) return False;
|
||||
|
||||
q = prs_mem_get(ps, len * sizeof(uint16));
|
||||
if (q == NULL) return False;
|
||||
|
||||
|
@ -48,7 +48,6 @@ typedef struct _prs_struct
|
||||
* always little-endian.
|
||||
*/
|
||||
BOOL bigendian_data;
|
||||
uint8 align; /* data alignment */
|
||||
BOOL is_dynamic; /* Do we own this memory or not ? */
|
||||
uint32 data_offset; /* Current working offset into data. */
|
||||
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);
|
||||
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);
|
||||
BOOL prs_align(prs_struct *ps);
|
||||
BOOL prs_align(prs_struct *ps, int align);
|
||||
void print_asc(int level, unsigned char *buf,int len);
|
||||
BOOL prs_read(prs_struct *ps, int fd, size_t len, int timeout);
|
||||
void dump_data(int level,char *buf1,int len);
|
||||
|
@ -1,5 +1,14 @@
|
||||
# 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)
|
||||
{
|
||||
module=name;
|
||||
@ -81,15 +90,119 @@ function start_union(elem)
|
||||
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,
|
||||
LOCAL, elem_num)
|
||||
{
|
||||
split(case, a, "[:]");
|
||||
case = a[1];
|
||||
elem_num = unions[current_union, "num_elems"];
|
||||
unions[current_union, elem_num] = add_element(type, elem, case);
|
||||
unions[current_union, "num_elems"]++;
|
||||
}
|
||||
|
||||
function end_union()
|
||||
function end_union(name)
|
||||
{
|
||||
if (name!="") {
|
||||
elements[current_union, "elem"] = name;
|
||||
}
|
||||
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
|
||||
|
||||
#define BOOL uint32;
|
||||
#define LONG uint32;
|
||||
#define DWORD uint32;
|
||||
#define STATUS uint32;
|
||||
#define BOOL uint32
|
||||
#define LONG uint32
|
||||
#define DWORD uint32
|
||||
#define STATUS uint32
|
||||
|
||||
typedef struct _UNISTR2 {
|
||||
uint32 max_len;
|
||||
@ -16,6 +16,8 @@ struct LPWSTR {
|
||||
UNISTR2 *str;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* -- CHARACTER DEVICE INFORMATION -- */
|
||||
|
||||
typedef struct _CHARDEV_INFO_0 {
|
||||
@ -29,64 +31,289 @@ struct LPWSTR {
|
||||
DWORD dwTime;
|
||||
} CHARDEV_INFO_1;
|
||||
|
||||
typedef struct _CHARDEV_INFO {
|
||||
DWORD dwLevel;
|
||||
union ctr[dwLevel] {
|
||||
case 1 CHARDEV_INFO_0 *ci0;
|
||||
case 2 CHARDEV_INFO_1 *ci1;
|
||||
}
|
||||
typedef union _CHARDEV_INFO switch (DWORD dwLevel) ctr {
|
||||
case 1: CHARDEV_INFO_0 *ci0;
|
||||
case 2: CHARDEV_INFO_1 *ci1;
|
||||
} CHARDEV_INFO;
|
||||
|
||||
typedef struct _CHARDEV_ENUM_0 {
|
||||
DWORD dwEntries;
|
||||
CHARDEV_INFO_0 ci0[dwEntries];
|
||||
[size_is(dwEntries)] CHARDEV_INFO_0 *ci0;
|
||||
} CHARDEV_ENUM_0;
|
||||
|
||||
typedef struct _CHARDEV_ENUM_1 {
|
||||
DWORD dwEntries;
|
||||
CHARDEV_INFO_1 ci1[dwEntries];
|
||||
[size_is(dwEntries)] CHARDEV_INFO_1 *ci1;
|
||||
} CHARDEV_ENUM_1;
|
||||
|
||||
typedef struct _CHARDEV_ENUM {
|
||||
DWORD dwLevel;
|
||||
union ctr[dwLevel] {
|
||||
case 0 CHARDEV_ENUM_0 *ce0;
|
||||
case 1 CHARDEV_ENUM_1 *ce1;
|
||||
}
|
||||
[switch_is(dwLevel)] union {
|
||||
[case(0)] CHARDEV_ENUM_0 *ce0;
|
||||
[case(1)] CHARDEV_ENUM_1 *ce1;
|
||||
} ctr;
|
||||
} CHARDEV_ENUM;
|
||||
|
||||
struct Q_NetrCharDevEnum {
|
||||
.trailer;
|
||||
LPWSTR pszServer;
|
||||
CHARDEV_ENUM *pCharDevEnum;
|
||||
DWORD dwMaxLen;
|
||||
DWORD *hResume;
|
||||
};
|
||||
STATUS NetrCharDevEnum( /* Function 0x00 */
|
||||
[in,unique] LPWSTR pszServer,
|
||||
[in,out] CHARDEV_ENUM* pCharDevEnum,
|
||||
[in] DWORD dwMaxLen,
|
||||
[out] DWORD* dwEntries,
|
||||
[in,out] DWORD* hResume
|
||||
);
|
||||
|
||||
struct R_NetrCharDevEnum {
|
||||
CHARDEV_ENUM *pCharDevEnum;
|
||||
DWORD *dwEntries;
|
||||
DWORD *hResume;
|
||||
.trailer;
|
||||
STATUS status;
|
||||
};
|
||||
STATUS NetrCharDevGetInfo( /* Function 0x01 */
|
||||
[in,unique] LPWSTR pszServer,
|
||||
[in,ref] LPWSTR pszDevice,
|
||||
[in] DWORD dwLevel,
|
||||
[out] CHARDEV_INFO* pCharDevInfo
|
||||
);
|
||||
|
||||
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 */
|
||||
# [in,unique] LPWSTR pszServer,
|
||||
# [in,ref] LPWSTR pszDevice,
|
||||
# [in] DWORD dwLevel,
|
||||
# [out] CHARDEV_INFO* pCharDevInfo
|
||||
# );
|
||||
typedef struct _CHARDEVQ_INFO_1 {
|
||||
LPWSTR pszName;
|
||||
DWORD dwPriority;
|
||||
LPWSTR pszDevices;
|
||||
DWORD dwNumUsers;
|
||||
DWORD dwNumAhead;
|
||||
} CHARDEVQ_INFO_1;
|
||||
|
||||
# STATUS NetrCharDevControl( /* Function 0x02 */
|
||||
# [in,unique] LPWSTR pszServer,
|
||||
# [in,ref] LPWSTR pszDevice,
|
||||
# [in] DWORD dwOpcode
|
||||
# );
|
||||
typedef union _CHARDEVQ_INFO switch (DWORD dwLevel) ctr {
|
||||
case 1: CHARDEVQ_INFO_0 *ci0;
|
||||
case 2: CHARDEVQ_INFO_1 *ci1;
|
||||
} 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 -- */
|
||||
|
||||
@ -111,58 +338,83 @@ struct LPWSTR {
|
||||
LPWSTR pszPasswd;
|
||||
} SHARE_INFO_2;
|
||||
|
||||
typedef struct _SHARE_INFO {
|
||||
DWORD dwLevel;
|
||||
union ctr[dwLevel] {
|
||||
case 0 SHARE_INFO_0 *si0;
|
||||
case 1 SHARE_INFO_1 *si1;
|
||||
case 2 SHARE_INFO_2 *si2;
|
||||
}
|
||||
typedef union _SHARE_INFO switch (DWORD dwLevel) ctr {
|
||||
case 0: SHARE_INFO_0 *si0;
|
||||
case 1: SHARE_INFO_1 *si1;
|
||||
case 2: SHARE_INFO_2 *si2;
|
||||
} SHARE_INFO;
|
||||
|
||||
typedef struct _SHARE_ENUM_0 {
|
||||
DWORD dwEntries;
|
||||
SHARE_INFO_0 si0[dwEntries];
|
||||
[size_is(dwEntries)] SHARE_INFO_0 *si0;
|
||||
} SHARE_ENUM_0;
|
||||
|
||||
typedef struct _SHARE_ENUM_1 {
|
||||
DWORD dwEntries;
|
||||
SHARE_INFO_1 si1[dwEntries];
|
||||
[size_is(dwEntries)] SHARE_INFO_1 *si1;
|
||||
} SHARE_ENUM_1;
|
||||
|
||||
typedef struct _SHARE_ENUM_2 {
|
||||
DWORD dwEntries;
|
||||
SHARE_INFO_2 si2[dwEntries];
|
||||
[size_is(dwEntries)] SHARE_INFO_2 *si2;
|
||||
} SHARE_ENUM_2;
|
||||
|
||||
typedef struct _SHARE_ENUM {
|
||||
DWORD dwLevel;
|
||||
union ctr[dwLevel] {
|
||||
case 0 SHARE_ENUM_0 *se0;
|
||||
case 1 SHARE_ENUM_1 *se1;
|
||||
case 2 SHARE_ENUM_2 *se2;
|
||||
}
|
||||
[switch_is(dwLevel)] union {
|
||||
[case(0)] SHARE_ENUM_0 *se0;
|
||||
[case(1)] SHARE_ENUM_1 *se1;
|
||||
[case(2)] SHARE_ENUM_2 *se2;
|
||||
} ctr;
|
||||
} SHARE_ENUM;
|
||||
|
||||
struct Q_NetrShareEnum {
|
||||
.trailer;
|
||||
LPWSTR pszServer;
|
||||
uint32 level;
|
||||
SHARE_ENUM pShareEnum;
|
||||
DWORD *hResume;
|
||||
DWORD dwMaxLen;
|
||||
DWORD dummy;
|
||||
};
|
||||
STATUS NetrShareAdd( /* Function 0x0E */
|
||||
[in,unique] LPWSTR pszServer,
|
||||
[in] DWORD dwLevel,
|
||||
[out] SHARE_INFO* pShareInfo,
|
||||
[in,out] DWORD* dwParmError
|
||||
);
|
||||
|
||||
struct R_NetrShareEnum {
|
||||
DWORD level;
|
||||
SHARE_ENUM pShareEnum;
|
||||
DWORD *dwEntries;
|
||||
DWORD *hResume;
|
||||
.trailer;
|
||||
STATUS status;
|
||||
};
|
||||
STATUS NetrShareEnum( /* Function 0x0F */
|
||||
[in,unique] LPWSTR pszServer,
|
||||
[in,out] SHARE_ENUM* pShareEnum,
|
||||
[in] DWORD dwMaxLen,
|
||||
[out] DWORD* dwEntries,
|
||||
[in,out] DWORD* hResume
|
||||
);
|
||||
|
||||
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 --- */
|
||||
|
||||
@ -196,70 +448,203 @@ struct LPWSTR {
|
||||
LPWSTR pszUserPath;
|
||||
} SERVER_INFO_102;
|
||||
|
||||
typedef struct _SERVER_INFO {
|
||||
DWORD dwLevel;
|
||||
union ctr[dwLevel] {
|
||||
case 100 SERVER_INFO_100 *sv100;
|
||||
case 101 SERVER_INFO_101 *sv101;
|
||||
case 102 SERVER_INFO_102 *sv102;
|
||||
}
|
||||
typedef union _SERVER_INFO switch (DWORD dwLevel) ctr {
|
||||
case 100: SERVER_INFO_100 *sv100;
|
||||
case 101: SERVER_INFO_101 *sv101;
|
||||
case 102: SERVER_INFO_102 *sv102;
|
||||
} SERVER_INFO;
|
||||
|
||||
struct Q_NetrServerGetInfo {
|
||||
.trailer;
|
||||
LPWSTR pszServerName;
|
||||
DWORD dwLevel;
|
||||
};
|
||||
STATUS NetrServerGetInfo( /* Function 0x15 */
|
||||
[in,unique] LPWSTR pszServerName,
|
||||
[in] DWORD dwLevel,
|
||||
[out] SERVER_INFO* pServerInfo
|
||||
);
|
||||
|
||||
struct R_NetrServerGetInfo {
|
||||
SERVER_INFO pServerInfo;
|
||||
.trailer;
|
||||
STATUS status;
|
||||
};
|
||||
STATUS NetrServerSetInfo( /* Function 0x16 */
|
||||
[in,unique] LPWSTR pszServerName,
|
||||
[in] DWORD dwLevel,
|
||||
[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 {
|
||||
LPWSTR pszName;
|
||||
} TRANSPORT_INFO_0;
|
||||
|
||||
typedef struct _TRANSPORT_INFO {
|
||||
DWORD dwLevel;
|
||||
union ctr[dwLevel] {
|
||||
case 0 TRANSPORT_INFO_0 *ti0;
|
||||
}
|
||||
typedef union _TRANSPORT_INFO switch (DWORD dwLevel) ctr {
|
||||
case 0: TRANSPORT_INFO_0 *ti0;
|
||||
} TRANSPORT_INFO;
|
||||
|
||||
typedef struct _TRANSPORT_ENUM_0 {
|
||||
DWORD level;
|
||||
DWORD dwEntries;
|
||||
TRANSPORT_INFO_0 ti0[dwEntries];
|
||||
DWORD dwEntries;
|
||||
[size_is(dwEntries)] TRANSPORT_INFO_0 *ti0;
|
||||
} TRANSPORT_ENUM_0;
|
||||
|
||||
typedef struct _TRANSPORT_ENUM {
|
||||
DWORD dwLevel;
|
||||
DWORD dummy;
|
||||
union ctr[dwLevel] {
|
||||
case 0 TRANSPORT_ENUM_0 *te0;
|
||||
}
|
||||
[switch_is(dwLevel)] union {
|
||||
[case(0)] TRANSPORT_ENUM_0 *te0;
|
||||
} ctr;
|
||||
} TRANSPORT_ENUM;
|
||||
|
||||
STATUS NetrServerTransportAdd( /* Function 0x19 */
|
||||
[in,unique] LPWSTR pszServer,
|
||||
[in] DWORD dwLevel,
|
||||
[out] TRANSPORT_INFO* pTransportInfo
|
||||
);
|
||||
|
||||
struct Q_NetrServerTransportEnum {
|
||||
.trailer;
|
||||
LPWSTR pszServer;
|
||||
TRANSPORT_ENUM pTransportEnum;
|
||||
DWORD dwMaxLen;
|
||||
LPWSTR server2;
|
||||
DWORD *hResume;
|
||||
DWORD preferred_length;
|
||||
STATUS *status;
|
||||
};
|
||||
STATUS NetrServerTransportEnum( /* Function 0x1a */
|
||||
[in,unique] LPWSTR pszServer,
|
||||
[in,out] TRANSPORT_ENUM* pTransportEnum,
|
||||
[in] DWORD dwMaxLen,
|
||||
[out] DWORD* dwEntries,
|
||||
[in,out] DWORD* hResume
|
||||
);
|
||||
|
||||
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:
|
||||
/* the parse is OK, just align and end */
|
||||
if (!prs_align(ps)) goto fail;
|
||||
|
||||
/* the parse is OK */
|
||||
return True;
|
||||
|
||||
fail:
|
||||
|
@ -10,7 +10,7 @@ function parse_error(msg) {
|
||||
next;
|
||||
}
|
||||
|
||||
/^\#define.*;/ {
|
||||
/^\#define.*/ {
|
||||
split($0,a,"[ \t;]*");
|
||||
parse_define(a[2], a[3]);
|
||||
next;
|
||||
@ -46,6 +46,20 @@ function parse_error(msg) {
|
||||
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");}
|
||||
|
||||
/^[ \t]*union.*\{/ {
|
||||
@ -54,6 +68,13 @@ function parse_error(msg) {
|
||||
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.*;/ {
|
||||
{if (current_union=="") parse_error("this must appear inide a union");}
|
||||
split($0,a,"[ \t;]*");
|
||||
@ -61,12 +82,27 @@ function parse_error(msg) {
|
||||
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]*\}$/ {
|
||||
{if (current_union=="") parse_error("this must appear inside a union");}
|
||||
end_union();
|
||||
end_union("");
|
||||
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");}
|
||||
|
||||
/^[ \t]*\};/ {
|
||||
@ -80,12 +116,35 @@ function parse_error(msg) {
|
||||
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;]*");
|
||||
add_struct_elem(a[2], a[3]);
|
||||
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.");
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
fstat(fd, &st);
|
||||
|
||||
prs_init(&ps, 0, 4, MARSHALL);
|
||||
prs_init(&ps, 0, MARSHALL);
|
||||
ps.is_dynamic=True;
|
||||
prs_read(&ps, fd, st.st_size, 0);
|
||||
ps.data_offset = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user