opt
/
kaspersky
/
kav4fs
/
src
/
kernel
/
module.linux
➕ New
📤 Upload
✎ Editing:
queue.h
← Back
/* * This source file is a part of a Kaspersky Antivirus Monitor. * Copyright (C) Kaspersky Lab, 1997-2010 * See License.txt for details * */ #ifndef KERNEL__QUEUE_H #define KERNEL__QUEUE_H typedef struct { int refcnt; lock_declare(lock); u_short queue_id; int flags; short blocked; int answer; wait_queue_head_t waitq; struct list_head list; } mqueue_entry_t; #define O_MQUEUE_READY 0x02 #define O_MQUEUE_TESTING 0x04 int Monitor_queue_init(void); int Monitor_queue_get_id(void); void Monitor_queue_set_answer(u_short queue_id, int answer); void Monitor_queue_wakeup(u_short queue_id); void Monitor_queue_cleanup(void); #ifndef __linux__ int Monitor_queue_add(u_short queue_id, int block, PackedBuffer* request, enum FileAccessType* answer); #else /*__linux__*/ typedef struct { // common fields for all (CHECK_SIGN and CHECK_FILE) requests struct list_head list; atomic_t refcnt; u_int32_t euid; // effective user ID u_int32_t egid; // effective group ID u_int16_t queue_id; // used only in MONITOR, but probably will be used in SAMBA // in the future u_int8_t request; // additional fields only for CHECK_FILE requests u_int8_t file_op_type; // enum file_oper_type u_int32_t pid; // process ID int32_t flags; // flags like O_RDONLY etc struct vfsmount* vfsmnt; // file root struct dentry* parent; // file parent dentry char const* name; // file name dev_t dev; ino_t ino; time_t mtime; int64_t size; u_int32_t owner_uid; u_int32_t file_mode; int64_t f_type; // file system type } check_req_data_t; typedef struct { atomic_long_t allocs; atomic_long_t releases; atomic_long_t requests; atomic_long_t detects; } queue_stats_t; extern queue_stats_t queue_stats; int Monitor_queue_add(u_short queue_id, int block, check_req_data_t* reqd, enum FileAccessType* answer); int Monitor_timedqueue_add(u_short queue_id, int block, check_req_data_t* reqd, enum FileAccessType* answer, unsigned long timeout); static inline void check_req_init(check_req_data_t* reqd, u_int8_t request) { atomic_set(&reqd->refcnt, 1); atomic_long_inc(&queue_stats.allocs); INIT_LIST_HEAD(&reqd->list); reqd->request = request; } static inline void fill_check_req_common_fields( check_req_data_t* reqd, u_int8_t request, u_int32_t euid, u_int32_t egid, struct vfsmount* vfsmnt, struct dentry* parent, char const* name) { check_req_init(reqd, request); reqd->euid = euid; reqd->egid = egid; reqd->vfsmnt = mntget(vfsmnt); reqd->parent = parent; reqd->name = kstrdup(name, GFP_KERNEL); } extern int check_req_queue_init(void); extern void check_req_queue_add(check_req_data_t* reqd); extern check_req_data_t* check_req_queue_get(void); extern int check_req_queue_put(check_req_data_t* reqd); extern void check_req_queue_release(check_req_data_t* reqd); extern int check_req_queue_empty(void); #endif /*__linux__*/ #endif // KERNEL__QUEUE_H
💾 Save Changes
Cancel
📤 Upload File
×
Select File
Upload
Cancel
➕ Create New
×
Type
📄 File
📁 Folder
Name
Create
Cancel
✎ Rename Item
×
Current Name
New Name
Rename
Cancel
🔐 Change Permissions
×
Target File
Permission (e.g., 0755, 0644)
0755
0644
0777
Apply
Cancel