[VFD] Import the VFD project (Virtual Floppy Drive) which allows creating virtual
[reactos.git] / modules / rosapps / include / vfd / vfdapi.h
diff --git a/modules/rosapps/include/vfd/vfdapi.h b/modules/rosapps/include/vfd/vfdapi.h
new file mode 100644 (file)
index 0000000..15af5a9
--- /dev/null
@@ -0,0 +1,324 @@
+/*
+       vfdapi.h
+
+       Virtual Floppy Drive for Windows
+       Driver control library API header
+
+       Copyright (C) 2003-2008 Ken Kato
+*/
+
+#ifndef _VFDAPI_H_
+#define _VFDAPI_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+//
+//     custom SERVICE STATE value returned by VfdGetDriverState
+//
+#define VFD_NOT_INSTALLED              0xffffffff
+
+//
+//     VFD operation code for VFD notification message
+//
+typedef enum _VFD_OPERATION {
+       VFD_OPERATION_NONE,                     //      No operation
+       VFD_OPERATION_INSTALL,          //      The driver was installed
+       VFD_OPERATION_CONFIG,           //      The driver config was changed
+       VFD_OPERATION_REMOVE,           //      The driver was removed
+       VFD_OPERATION_START,            //      The driver was started
+       VFD_OPERATION_STOP,                     //      The driver was stopped
+       VFD_OPERATION_OPEN,                     //      An image was opened
+       VFD_OPERATION_SAVE,                     //      An image was saved
+       VFD_OPERATION_CLOSE,            //      An image was closed
+       VFD_OPERATION_SETLINK,          //      A drive letter was created
+       VFD_OPERATION_DELLINK,          //      A drive letter was removed
+       VFD_OPERATION_PROTECT,          //      Write protect state was changed
+       VFD_OPERATION_SHELL,            //      Shell extension was installed/removed
+       VFD_OPERATION_MAX                       //      Maximum value place holder
+} VFD_OPERATION, *PVFD_OPERATION;
+
+//==============================
+//     Driver management functions
+//==============================
+
+//     Install the driver
+
+DWORD WINAPI VfdInstallDriver(
+       PCSTR                   sFileName,
+       DWORD                   nStart);
+
+//     Uninstall the driver
+
+DWORD WINAPI VfdRemoveDriver();
+
+//     Configure the driver
+
+DWORD WINAPI VfdConfigDriver(
+       DWORD                   nStart);
+
+//     Start the driver
+
+DWORD WINAPI VfdStartDriver(
+       PDWORD                  pState);
+
+//     Stop the driver
+
+DWORD WINAPI VfdStopDriver(
+       PDWORD                  pState);
+
+//     Get current driver config information
+
+DWORD WINAPI VfdGetDriverConfig(
+       PSTR                    sFileName,
+       PDWORD                  pStart);
+
+//     Get current driver state
+
+DWORD WINAPI VfdGetDriverState(
+       PDWORD                  pState);
+
+//==============================
+//     Device control functions
+//==============================
+
+//     Open a VFD device
+
+HANDLE WINAPI VfdOpenDevice(
+       ULONG                   nTarget);
+
+//     Get the device number
+
+DWORD WINAPI VfdGetDeviceNumber(
+       HANDLE                  hDevice,
+       PULONG                  pNumber);
+
+//     Get the device name
+
+DWORD WINAPI VfdGetDeviceName(
+       HANDLE                  hDevice,
+       PCHAR                   pName,
+       ULONG                   nLength);
+
+//     Get the driver version
+
+DWORD WINAPI VfdGetDriverVersion(
+       HANDLE                  hDevice,
+       PULONG                  pVersion);
+
+//==============================
+//     image functions
+//==============================
+
+//     Open a virtual floppy image
+
+DWORD WINAPI VfdOpenImage(
+       HANDLE                  hDevice,
+       PCSTR                   sFileName,
+       VFD_DISKTYPE    nDiskType,
+       VFD_MEDIA               nMediaType,
+       VFD_FLAGS               nMediaFlags);
+
+//     Close the current virtual floppy image
+
+DWORD WINAPI VfdCloseImage(
+       HANDLE                  hDevice,
+       BOOL                    bForce);
+
+//     Get the current image information
+
+DWORD WINAPI VfdGetImageInfo(
+       HANDLE                  hDevice,
+       PSTR                    sFileName,
+       PVFD_DISKTYPE   pDiskType,
+       PVFD_MEDIA              pMediaType,
+       PVFD_FLAGS              pMediaFlags,
+       PVFD_FILETYPE   pFileType,
+       PULONG                  pImageSize);
+
+//     Save the current image into a file
+
+DWORD WINAPI VfdSaveImage(
+       HANDLE                  hDevice,
+       PCSTR                   sFileName,
+       BOOL                    bOverWrite,
+       BOOL                    bTruncate);
+
+//     Format the current virtual media
+
+DWORD WINAPI VfdFormatMedia(
+       HANDLE                  hDevice);
+
+//     Get the current media state (opened / write protected)
+
+DWORD WINAPI VfdGetMediaState(
+       HANDLE                  hDevice);
+
+//     Set write protect state
+
+DWORD WINAPI VfdWriteProtect(
+       HANDLE                  hDevice,
+       BOOL                    bProtect);
+
+//     Dismount the volume (should be called before Save, Format)
+
+DWORD WINAPI VfdDismountVolume(
+       HANDLE                  hDevice,
+       BOOL                    bForce);
+
+//==============================
+//     Drive letter functions
+//==============================
+
+//     Assign or remove a persistent drive letter
+
+DWORD WINAPI VfdSetGlobalLink(
+       HANDLE                  hDevice,
+       CHAR                    cLetter);
+
+//     Get the current persistent drive letter
+
+DWORD WINAPI VfdGetGlobalLink(
+       HANDLE                  hDevice,
+       PCHAR                   pLetter);
+
+//     Assign or remove an ephemeral drive letter
+
+DWORD WINAPI VfdSetLocalLink(
+       HANDLE                  hDevice,
+       CHAR                    cLetter);
+
+//     Get the first ephemeral drive letter
+
+DWORD WINAPI VfdGetLocalLink(
+       HANDLE                  hDevice,
+       PCHAR                   pLetter);
+
+//     Choose the first available drive letter
+
+CHAR WINAPI VfdChooseLetter();
+
+//==============================
+//     utility functions
+//==============================
+
+//     Check running platform
+
+BOOL WINAPI VfdIsValidPlatform();
+
+//     Get VFD notification message value
+
+UINT WINAPI VfdGetNotifyMessage();
+
+//     Check if specified file is a valid VFD driver
+
+DWORD WINAPI VfdCheckDriverFile(
+       PCSTR                   sFileName,
+       PULONG                  pFileVersion);
+
+//     Check if specified path is a valid image file
+
+DWORD WINAPI VfdCheckImageFile(
+       PCSTR                   sFileName,
+       PDWORD                  pAttributes,
+       PVFD_FILETYPE   pFileType,
+       PULONG                  pImageSize);
+
+//     Create a formatted new image file
+
+DWORD WINAPI VfdCreateImageFile(
+       PCSTR                   sFileName,
+       VFD_MEDIA               nMediaType,
+       VFD_FILETYPE    nFileType,
+       BOOL                    bOverWrite);
+
+//     Lookup the largest media to fit in a size
+
+VFD_MEDIA WINAPI VfdLookupMedia(
+       ULONG                   nSize);
+
+//     Get media size (in bytes) of a media type
+
+ULONG WINAPI VfdGetMediaSize(
+       VFD_MEDIA               nMediaType);
+
+//     Get media type name
+
+PCSTR WINAPI VfdMediaTypeName(
+       VFD_MEDIA               nMediaType);
+
+//     Make a file description text
+
+void WINAPI VfdMakeFileDesc(
+       PSTR                    pBuffer,
+       ULONG                   nBufSize,
+       VFD_FILETYPE    nFileType,
+       ULONG                   nFileSize,
+       DWORD                   nFileAttr);
+
+//==============================
+//     Shell Extension functions
+//==============================
+
+//     install the shell extension
+
+DWORD WINAPI VfdRegisterHandlers();
+
+//     uninstall the shell extension
+
+DWORD WINAPI VfdUnregisterHandlers();
+
+//     check if the shell extension is installed
+
+DWORD WINAPI VfdCheckHandlers();
+
+//==============================
+//     GUI utility functions
+//==============================
+
+//     open an existing image file
+
+DWORD WINAPI VfdGuiOpen(
+       HWND                    hParent,        //      parent window
+       ULONG                   nDevice);       //      device number
+
+//     Save the current image
+
+DWORD WINAPI VfdGuiSave(
+       HWND                    hParent,        //      parent window
+       ULONG                   nDevice);       //      device number
+
+//     close the current image
+
+DWORD WINAPI VfdGuiClose(
+       HWND                    hParent,        //      parent window
+       ULONG                   nDevice);       //      device number
+
+//     format the current media
+
+DWORD WINAPI VfdGuiFormat(
+       HWND                    hParent,        //      parent window
+       ULONG                   nDevice);       //      device number
+
+//     display a tooltip window
+
+void WINAPI VfdToolTip(
+       HWND                    hParent,        //      parent window
+       PCSTR                   sText,          //      tooltip text
+       int                             pos_x,          //      position x
+       int                             pos_y,          //      position y
+       BOOL                    stick);         //      stick (remain until losing the focus) or
+                                                       //      non-stick (remain until the mouse leaves)
+
+//     Show image information tooltip
+
+void WINAPI VfdImageTip(
+       HWND                    hParent,
+       ULONG                   nDevice);
+
+#ifdef __cplusplus
+}
+#endif //      __cplusplus
+
+#endif //      _VFDAPI_H_