aboutsummaryrefslogtreecommitdiff
path: root/Src/burnlib/eraseMedium.h
blob: ffd8cede0fd84550650ac9c8f219aac7100f165a (plain) (blame)
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#ifndef NULLSOFT_ERASEMEDIUM_HEADER
#define NULLSOFT_ERASEMEDIUM_HEADER

#include "./main.h"
#include "./primosdk.h"

#define ERASEMEDIUM_STATUS				0x0000
#define ERASEMEDIUM_ERROR				0x1000

// status messages
#define ERASEMEDIUM_READY				((ERASEMEDIUM_STATUS) + 0x0001)
#define ERASEMEDIUM_INITIALIZING			((ERASEMEDIUM_STATUS) + 0x0002)
#define ERASEMEDIUM_ERASING				((ERASEMEDIUM_STATUS) + 0x0003)
#define ERASEMEDIUM_FINISHING			((ERASEMEDIUM_STATUS) + 0x0004)
#define ERASEMEDIUM_CANCELING			((ERASEMEDIUM_STATUS) + 0x0005)
#define ERASEMEDIUM_COMPLETED			((ERASEMEDIUM_STATUS) + 0x0006)
#define ERASEMEDIUM_ABORTED				((ERASEMEDIUM_STATUS) + 0x0007)


// error messages
#define ERASEMEDIUM_ALREADYSTARTED		((ERASEMEDIUM_ERROR) + 0x0001)
#define ERASEMEDIUM_UNABLEINITPRIMO		((ERASEMEDIUM_ERROR) + 0x0002)
#define ERASEMEDIUM_DEVICENOTREADY		((ERASEMEDIUM_ERROR) + 0x0003)
#define ERASEMEDIUM_DISCINFOERROR		((ERASEMEDIUM_ERROR) + 0x0004)
#define ERASEMEDIUM_DISCNOTERASABLE		((ERASEMEDIUM_ERROR) + 0x0005)
#define ERASEMEDIUM_BEGINBURNFAILED		((ERASEMEDIUM_ERROR) + 0x0006)
#define ERASEMEDIUM_ENDBURNFAILED		((ERASEMEDIUM_ERROR) + 0x0007)
#define ERASEMEDIUM_ERASEMEDIUMFAILED	((ERASEMEDIUM_ERROR) + 0x0008)

// callback returns
#define ERASEMEDIUM_CONTINUE	0
#define ERASEMEDIUM_STOP		1


typedef DWORD (WINAPI *ERASEMEDIUMCALLBACK)(void*, void*, DWORD, DWORD);

class EraseMedium
{
public:
	BURNLIB_API EraseMedium(void);
	BURNLIB_API ~EraseMedium(void);

public:
	BURNLIB_API DWORD Start(DWORD drive, DWORD eraseMode, ERASEMEDIUMCALLBACK notifyCB, void *userParam, int block);
	BURNLIB_API void Stop(void);
	BURNLIB_API DWORD GetErrorCode(void) { return errorCode; }
	BURNLIB_API BOOL IsRunning(void) { return (NULL != hThread); }

public: 
	BURNLIB_API DWORD SetEject(DWORD eject);
protected:
	DWORD OnNotify(DWORD eraseCode, DWORD primoCode);
	static DWORD WINAPI StatusThread(void* parameter);

protected:
	WABURNSTRUCT		bs;
	obj_primo			*primoSDK;
	unsigned int	eject;
	HANDLE			hThread;
	HANDLE			evntStop;
	HANDLE			evntThreadExit;
	DWORD			errorCode;
	void*			userparam;

	ERASEMEDIUMCALLBACK	notifyCB;
};

#endif //NULLSOFT_ERASEMEDIUM_HEADER