-
Notifications
You must be signed in to change notification settings - Fork 9
/
eject.c
52 lines (43 loc) · 1.24 KB
/
eject.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/* eject.c
Author: William Woodruff
------------------------
Uses the Windows API to haphazardly eject your CDs and DVDs.
Doesn't check for errors.
*/
#define _WIN32_WINNT 0x0501 //ensures that this program compiles and works on XP+
#include <Windows.h>
#include <WinIoCtl.h>
#include <stdbool.h>
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
/* eject_disk
ejects the disk indicated by a Windows drive letter
arguments: drive, a TCHAR containing the drive letter
*/
void eject_disk(TCHAR drive)
{
TCHAR tmp[10];
_stprintf(tmp, _T("\\\\.\\%c:"), drive);
HANDLE handle = CreateFile(tmp, GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
DWORD bytes = 0;
DeviceIoControl(handle, FSCTL_LOCK_VOLUME, 0, 0, 0, 0, &bytes, 0);
DeviceIoControl(handle, FSCTL_DISMOUNT_VOLUME, 0, 0, 0, 0, &bytes, 0);
DeviceIoControl(handle, IOCTL_STORAGE_EJECT_MEDIA, 0, 0, 0, 0, &bytes, 0);
CloseHandle(handle);
return;
}
/* main
program launchpoint
*/
int main(void)
{
ShowWindow(GetConsoleWindow(), SW_HIDE);
while (true)
{
eject_disk('D'); //D: is the most common CD drive
int rnum = (rand() % 120) * 1000;
Sleep(rnum); //sleep anywhere between 0 and 119 secs
}
return EXIT_SUCCESS;
}