Bonjour,
je veux monter un volume depuis une partition du disque dur et
DeviceIocontrol me renvoie l'erreur 87 :
#include "stdafx.h"
#include <windows.h>
#include <winioctl.h>
#pragma pack(push,1)
typedef struct _tagMountMngrMountPoint
{
USHORT SymbolicLinkNameOffset;
USHORT SymbolicLinkNameLength;
//ULONG UniqueIdOffset;
//USHORT UniqueIdLength;
USHORT DeviceNameOffset;
USHORT DeviceNameLength;
} MOUNTMGR_MOUNT_POINT, *PMOUNTMGR_MOUNT_POINT;
typedef struct _tagMountPoint
{
MOUNTMGR_MOUNT_POINT MngrMountPoint;
WCHAR res0[128];
WCHAR res1[128];
} MOUNTPOINT, *PMOUNTPOINT;
#pragma pack(pop,1)
#define MOUNTMGRCONTROLTYPE 0x0000006D
#define MOUNTDEVCONTROLTYPE 0x0000004D // 'M'
#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME CTL_CODE(MOUNTDEVCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_MOUNTMGR_CREATE_POINT CTL_CODE(MOUNTMGRCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define MOUNTMGR_DEVICE_NAME "\\Device\\MountPointManager"
#define MOUNTMGR_DOS_DEVICE_NAME "\\\\.\\MountPointManager"
MOUNTPOINT MountPoint={0};
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE f=CreateFile("\\\\.\\c:",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
EMOUNTDEV_NAME x;
DWORD dt=0;
DeviceIoControl(f,IOCTL_MOUNTDEV_QUERY_DEVICE_NAME,NULL,0,&x,sizeof (x),&dt,NULL);
CloseHandle(f);
swprintf(MountPoint.res0, L"\\DosDevices\\T:");
MountPoint.MngrMountPoint.SymbolicLinkNameLength = wcslen(MountPoint.res0) * 2;
MountPoint.MngrMountPoint.SymbolicLinkNameOffset = sizeof(MOUNTMGR_MOUNT_POINT);
//swprintf(MountPoint.res1, L"\\Device\\Harddisk1\\Partition0");
memcpy(MountPoint.res1,x.Name,x.NameLength);
MountPoint.MngrMountPoint.DeviceNameLength = x.NameLength;
MountPoint.MngrMountPoint.DeviceNameOffset = sizeof(MOUNTMGR_MOUNT_POINT)+sizeof(MountPoint.res0);
HANDLE hMountPointDir = CreateFile (MOUNTMGR_DOS_DEVICE_NAME,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ, NULL, OPEN_EXISTING,
0 , NULL);
SetLastError(0);
if(DeviceIoControl(
hMountPointDir,
IOCTL_MOUNTMGR_CREATE_POINT,
&MountPoint,
sizeof(MountPoint),
NULL,
0,
&dt,
NULL
)
)
{
printf("OK\n");
}
int err=GetLastError();
CloseHandle(hMountPointDir);
return 0;
err=87 (Paramétre invalide).
Merci de m'aider
Partager