mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
0b1d9d40c2
Spotted this in mdssvc response that containied many results for a search request: if the mdssvc response blob is larger then ~32k, the server fragments the response in 32k fragments and sets the "fragment" field to 1. Note that mdssvc implemenets result set "fragmentation" at the result set layer, not at the marshalled response buffer layer. Therefor mdssvc always sets this field to 0. Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
69 lines
2.6 KiB
Plaintext
69 lines
2.6 KiB
Plaintext
import "misc.idl";
|
|
[
|
|
uuid("885d85fb-c754-4062-a0e7-6872ce0064f4"),
|
|
endpoint("ncacn_np:[\\pipe\\mdssvc]", "ncalrpc:"),
|
|
version(2.0),
|
|
helpstring("Spotlight metadata search service")
|
|
]
|
|
interface mdssvc
|
|
{
|
|
void mdssvc_open(
|
|
[in,out,ref] uint32 *device_id,
|
|
[in,out,ref] uint32 *unkn2, /* always 0x17 ? */
|
|
[in,out,ref] uint32 *unkn3, /* always 0 ? */
|
|
[in][string,charset(UTF8),size_is(1025)] uint8 share_mount_path[],
|
|
[in][string,charset(UTF8),size_is(1025)] uint8 share_name[],
|
|
[out,string,charset(UTF8),size_is(1025)] uint8 share_path[],
|
|
[out,ref] policy_handle *handle
|
|
);
|
|
|
|
void mdssvc_unknown1(
|
|
[in] policy_handle handle,
|
|
[in] uint32 unkn1, /* always 0, some status ? */
|
|
[in] uint32 device_id,
|
|
[in] uint32 unkn3, /* = mdssvc_open.unkn2 ? */
|
|
[in] uint32 unkn4, /* always 0, some status ? */
|
|
[in] uint32 uid,
|
|
[in] uint32 gid,
|
|
[out,ref] uint32 *status,
|
|
[out,ref] uint32 *flags, /* always 0x6b000001 ? */
|
|
[out,ref] uint32 *unkn7 /* always 0 ? */
|
|
);
|
|
|
|
typedef [public] struct {
|
|
uint32 length;
|
|
uint32 size;
|
|
[size_is(size),length_is(length)] uint8 *spotlight_blob;
|
|
} mdssvc_blob;
|
|
|
|
void mdssvc_cmd(
|
|
[in] policy_handle handle,
|
|
[in] uint32 unkn1, /* always 0, status ? */
|
|
[in] uint32 device_id,
|
|
[in] uint32 unkn3, /* = mdssvc_open.unkn2 ? */
|
|
[in] uint32 unkn4, /* always 0 ? */
|
|
[in] uint32 flags, /* always 0x6b000001 ? */
|
|
[in] mdssvc_blob request_blob,
|
|
[in] uint32 unkn5, /* always 0 ? */
|
|
[in] uint32 max_fragment_size1,
|
|
[in] uint32 unkn6, /* always 1 ? */
|
|
/* always max_fragment_size1 = max_fragment_size2 ? */
|
|
[in] uint32 max_fragment_size2,
|
|
[in] uint32 unkn7, /* always 0 ? */
|
|
[in] uint32 unkn8, /* always 0 ? */
|
|
[out,ref] uint32 *fragment,
|
|
[out,ref] mdssvc_blob *response_blob,
|
|
[out,ref] uint32 *unkn9 /* always 0 ? */
|
|
);
|
|
|
|
void mdssvc_close(
|
|
[in] policy_handle in_handle,
|
|
[in] uint32 unkn1, /* always 0, some status ? */
|
|
[in] uint32 device_id,
|
|
[in] uint32 unkn2, /* = mdssvc_open.unkn2 ? */
|
|
[in] uint32 unkn3, /* always 0, some status ? */
|
|
[out,ref] policy_handle *out_handle,
|
|
[out,ref] uint32 *status
|
|
);
|
|
}
|