sadek9 Temat założony przez niniejszego użytkownika |
Wirtualny dysk w Explorerze. » 2014-08-25 00:10:38 Cześć Wszystkim,
Sam do końca nie wiem czy ten temat jest odpowiedni na to forum, no ale mam nadzieję, że jakąś wskazówkę do dalszych działań mi udzielicie.
Jako zaliczenie jednego z przedmiotów na uczelni mam do wykonania następujacy projekt:
"Wirtualny dysk w Explorerze („Shell Namespace Extensions”) umożliwiający wysyłanie maili. Po wybraniu podfolderu z nazwiskiem i wstawieniu tam pliku automatycznie nastąpi jego wysłanie. Gdy wstawimy do folderu nadrzędnego nastąpi wysłanie elementu do wszystkich, któych katalogi są katalogami podrzędnymi. Możliwość zmapowania maile ze skrzynki mapowane są na strukturę plików. Wyszukiwane są nazwiska i tworzone wirtualne katalogi. Można zmapować dowolny adres mailowy. Temat maila ma nazwisko i imię oraz grupę, odpowiednio sformatowane pozwala na rozłożenie w odpowiednich katalogach."
Pytania co to jest wirtualny dysk w Explorerze ? Jak to wykonać ? To kwestia napisania jakiegoś programu w C++ ?
Dziękuje za wszelką pomoc z góry ! :)
Pozdrawiam, Mateusz |
|
Monika90 |
» 2014-08-25 00:16:00 |
|
sadek9 Temat założony przez niniejszego użytkownika |
» 2014-08-27 21:12:11 A jakaś polska literatura, na ten temat ? Cokolwiek ? |
|
sadek9 Temat założony przez niniejszego użytkownika |
Problem z kompilacją. » 2014-09-06 20:08:53 Cześć, Udało mi się ruszyć jako tako z tematem. Tworzę wirtulany dysk, przy użyciu Code::Blocks Kod umieściłem pod wiadomścią. W projekcie w programie dodałem plik virtualdisk.h, a program ciągle mi wyświetla informacje o braku takiej pozycji... NIe wiem o co chodzi, ktoś pomoże ? #include <iostream> #include <fstream> #include <string> #include <virtualdisk.h>
#pragma comment(lib, "virtualdisk.lib")
static const GUID VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT = { 0xEC984AEC, 0xA0F9, 0x47e9, 0x90, 0x1F, 0x71, 0x41, 0x5A, 0x66, 0x34, 0x5B };
#define ARRAY_SIZE(a) \ ((sizeof(a) / sizeof(*(a))) / \ static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))
DWORD CreateDisk( PCWSTR virtualDiskFilePath, HANDLE * handle ) { VIRTUAL_STORAGE_TYPE storageType = { VIRTUAL_STORAGE_TYPE_DEVICE_VHD, VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT }; CREATE_VIRTUAL_DISK_PARAMETERS parameters = { }; parameters.Version = CREATE_VIRTUAL_DISK_VERSION_1; parameters.Version1.MaximumSize = 1024 * 1024 * 1024; parameters.Version1.BlockSizeInBytes = CREATE_VIRTUAL_DISK_PARAMETERS_DEFAULT_BLOCK_SIZE; parameters.Version1.SectorSizeInBytes = CREATE_VIRTUAL_DISK_PARAMETERS_DEFAULT_SECTOR_SIZE; parameters.Version1.SourcePath = NULL; int result =::CreateVirtualDisk( & storageType, virtualDiskFilePath, VIRTUAL_DISK_ACCESS_ALL, NULL, CREATE_VIRTUAL_DISK_FLAG_NONE, 0, & parameters, NULL, handle ); return result; }
DWORD OpenDisk( PCWSTR virtualDiskFilePath, HANDLE * handle ) { VIRTUAL_STORAGE_TYPE storageType = { VIRTUAL_STORAGE_TYPE_DEVICE_VHD, VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT }; OPEN_VIRTUAL_DISK_PARAMETERS parameters = { OPEN_VIRTUAL_DISK_VERSION_1 }; parameters.Version1.RWDepth = 1024; return::OpenVirtualDisk( - & storageType, virtualDiskFilePath, VIRTUAL_DISK_ACCESS_ALL, OPEN_VIRTUAL_DISK_FLAG_NONE, & parameters, handle ); }
int main( int argc, char * argv[] ) { LPTSTR virtualDiskFilePath = _T( "c:\\source\\drive.vhd" ); HANDLE handle; DWORD result; ULONG bytesUsed; bool vhdCreated = false; result = CreateDisk( virtualDiskFilePath, & handle ); if( result == ERROR_FILE_EXISTS ) { result = OpenDisk( virtualDiskFilePath, & handle ); if( result != ERROR_SUCCESS ) { std::wcout << "Unable to open virtual disk" << std::endl; return 1; } } else if( result != ERROR_SUCCESS ) { std::wcout << "Unable to create virtual disk" << std::endl; return 1; } else { vhdCreated = true; } result =::AttachVirtualDisk( handle, NULL, ATTACH_VIRTUAL_DISK_FLAG_NO_DRIVE_LETTER, 0, 0, NULL ); if( result != ERROR_SUCCESS ) { std::wcout << "Unable to attach virtual disk" << std::endl; return 1; } if( result == ERROR_SUCCESS && vhdCreated == true ) { std::wcout << "Virtual disk image created. Go into the Computer Management admin panel" << std::endl << "and add a volume and format it.\n" << std::endl; system( "pause" ); } TCHAR physicalDriveName[ MAX_PATH ]; DWORD physicalDriveNameSize = ARRAY_SIZE( physicalDriveName ); result =::GetVirtualDiskPhysicalPath( handle, & physicalDriveNameSize, physicalDriveName ); if( result != ERROR_SUCCESS ) { std::wcout << "Unable to retrieve virtual disk path" << std::endl; return 1; } const std::wstring deviceName = physicalDriveName; Sleep( 2500 ); std::wstring volumeName; TCHAR volumeNameBuffer[ MAX_PATH ]; HANDLE hVol =::FindFirstVolume( volumeNameBuffer, ARRAY_SIZE( volumeNameBuffer ) ); if( hVol == INVALID_HANDLE_VALUE ) { std::wcout << "Unable to find first volume" << std::endl; return 1; } do { size_t len = wcslen( volumeNameBuffer ); if( volumeNameBuffer[ len - 1 ] == '\\' ) { volumeNameBuffer[ len - 1 ] = 0; } HANDLE volumeHandle =::CreateFile( volumeNameBuffer, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, NULL ); if( volumeHandle == INVALID_HANDLE_VALUE ) { std::wcout << "Unable to open volume " << volumeNameBuffer << std::endl; } else { STORAGE_DEVICE_NUMBER deviceInfo = { 0 }; if(::DeviceIoControl( volumeHandle, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL, 0, & deviceInfo, sizeof( deviceInfo ), & bytesUsed, NULL ) ) { std::wstring tmpName( std::wstring( L"\\\\.\\PhysicalDrive" ) + std::to_wstring(( long long ) deviceInfo.DeviceNumber ) ); if( _wcsicmp( tmpName.c_str(), deviceName.c_str() ) == 0 ) { volumeName = std::wstring( volumeNameBuffer ) + L"\\\\"; CloseHandle( volumeHandle ); break; } } CloseHandle( volumeHandle ); } } while(::FindNextVolume( hVol, volumeNameBuffer, ARRAY_SIZE( volumeNameBuffer ) ) != FALSE ); ::FindVolumeClose( hVol ); if( volumeName.size() == 0 ) { std::wcout << "Unable to locate a volume on this device" << std::endl; return 1; } std::wcout << "Device: " << physicalDriveName << std::endl; std::wcout << "Volume: " << volumeName << std::endl; std::wcout << "\n\nSuccess! Now create the file!" << std::endl; std::ofstream output; output.open( volumeName + L"hello.txt" ); if( output.fail() ) { std::wcout << "Unable to open output file." << std::endl; return 1; } output.close(); system( "pause" ); return 0; } |
|
1aam2am1 |
» 2014-09-06 20:23:02 #include "virtualdisk.h" |
|
« 1 » |