#include "stddef.h" #include #include #include #define DEV_ADD_DISK 1 #define TMPDISK_SIZE 10 // Mb #pragma pack(push, 1) struct { unsigned disk_size; unsigned char disk_id; } tmpdisk_add; #pragma pack(pop) char* tmpdisk_res_text[] = { "TmpDisk operation completed successfully", "Unknown IOCTL code, wrong input/output size...", "DiskId must be from 0 to 9", "DiskSize is too large", "DiskSize is too small, might be too little free RAM", "Memory allocation failed", "Unknown error O_o", 0 }; int main() { ksys_drv_hand_t tmpdisk_drv = _ksys_load_driver("tmpdisk"); if (!tmpdisk_drv) { puts("tmpdisk.sys driver not load!"); exit(0); } else { puts("tmpdisk.sys driver is load!"); } tmpdisk_add.disk_size = TMPDISK_SIZE * 1024 * 1024 / 512; tmpdisk_add.disk_id = 5; ksys_ioctl_t ioctl; ioctl.func_num = DEV_ADD_DISK; ioctl.handler = tmpdisk_drv; ioctl.in_data_ptr = &tmpdisk_add; ioctl.in_data_size = sizeof(tmpdisk_add); ioctl.out_data_ptr = NULL; ioctl.out_data_size = 0; printf("Create '/tmp%u/' disk a %u Mb size...\n", tmpdisk_add.disk_id, TMPDISK_SIZE); unsigned status = _ksys_driver_control(&ioctl); if (status < 7) { puts(tmpdisk_res_text[status]); } else { puts(tmpdisk_res_text[6]); } exit(0); }