EldoS | Feel safer!

Software components for data protection, secure storage and transfer

Running simple app using EldoS RawDisk

Also by EldoS: CallbackRegistry
A component to monitor and control Windows registry access and create virtual registry keys.
Posted: 11/29/2013 04:08:44
by Jakub Bulczak (Basic support level)
Joined: 11/29/2013
Posts: 4

Hi :)

I am trying to write simple C++ application using EldoS RawDisk. It have to write data contained in buffer into specified sector on my hard drive (2057th sector to be specific). When I'm using a CreateFile method i get linking error (code 2019, VS2010), while when using Open or OpenEx method application is being build successfuly, but when launched it simply crashes.

Code posted below:

#include <stdio.h>
#include <rawdisk.h>

void main(){

   printf("CheckPoint 0");

   LPBOOL reboot = false;
   CRawDisk::InstallDriver(L"C:\\rawdisk\\location\\path\\elrawdsk.sys", "EldoS_RawDisk", reboot);

   printf("CheckPoint 1");

   HANDLE h = CRawDisk::Open(L"\\??\\PHYSICALDRIVE0", GENERIC_READ | GENERIC_WRITE, license_key);
   //HANDLE h = CRawDisk::OpenEx(...)
   //HANDLE h = CRawDisk::CreateFileA(L"\\\\.\\PHYSICALDRIVE0", GENERIC_READ | GENERIC_WRITE, OPEN_EXISTING, 0, license_key);

   printf("CheckPoint 2");
   unsigned char* data = new unsigned char[512];
   for(int i=0; i < 512; i++)
      data[i] = '0' + (i % 10);

   printf("CheckPoint 3");

   CRawDisk::WriteSectors(h, 2057, 1, data);

   printf("CheckPoint 4");


A have tried varius ways to get rid of this issues:

- Instaling driver at the beginning on the aplication (as shown above) or not
- Using Windows.h CreateFile methods to obtain a DiskHandle
- Using ////.//PHYSICALDRIVE0 and //??//PHYSICALDRIVE0 device name
- Using CreateFile, OpenEx and Open methods from CRawDisk class (where CreateFile method don't work, as described above).

One more interesting thing I discovered is when I am using CRawDisk::CreateFileA() method it refer to rawdisk.h CRawDisk CreateFile method, but when I'm using CRawDisk::CreateFile() method (as it is specified in a rawdisk.h header) it refer to WinBase.h #define CreateFile method (despide it is not included).

I will be grateful for help or some working sample code of using CRawDisk::WriteSector() method.

I am working on Windows 7 Ultimate x64, developing on Visual Studio 2010 Ultimate, C++ project build in x86 debug mode, using MT CPP library for 32-bit projects (EldoS\RawDisk\CPP\VC2010\32bit\static_runtime(MT)).

I am using a trial version of RawDisk library.

Thanks from advance,

Posted: 11/29/2013 05:57:01
by Volodymyr Zinin (Team)

Hi Bulczi,

In order to read/write disk sectors use CRawDisk::Open or CRawDisk::OpenEx methods. The CRawDisk::CreateFile method is only to access files.

I.e. the call
HANDLE h = CRawDisk::Open(L"\\??\\PHYSICALDRIVE0", GENERIC_READ | GENERIC_WRITE, license_key);
should work correctly.

Please specify what a call in your code sample that actually causes the crash.
Posted: 11/29/2013 10:49:16
by Jakub Bulczak (Basic support level)
Joined: 11/29/2013
Posts: 4

Error is thrown by InstallDriver method (Access Violation Error), either (if I put InstallDriver line in comments) Open method (ERDError - both for "\\\\.\\PHYSICALDRIVE0" and "\\??\\PHYSICALDRIVE0").

My HDD is described by WMI as "\\\\.\\PHYSICALDRIVE0".

Posted: 11/29/2013 13:23:17
by Volodymyr Zinin (Team)

LPBOOL reboot = false; <====== here is the error
CRawDisk::InstallDriver(L"C:\\rawdisk\\location\\path\\elrawdsk.sys", "EldoS_RawDisk", reboot);
Posted: 12/01/2013 15:10:11
by Jakub Bulczak (Basic support level)
Joined: 11/29/2013
Posts: 4

Now it's working great :)

I've changed:
LPBOOL reboot = false;
CRawDisk::InstallDriver(L"C:\\rawdisk\\location\\path\\elrawdsk.sys", "EldoS_RawDisk", reboot);

bool reboot = false;
CRawDisk::InstallDriver(L"C:\\rawdisk\\location\\path\\elrawdsk.sys", "EldoS_RawDisk", (LPBOOL)(&reboot));

Thanks very much for your help :)
Posted: 12/02/2013 05:48:29
by Jakub Bulczak (Basic support level)
Joined: 11/29/2013
Posts: 4

Hi again - I have one more question:

Does CRawDisk::InstallDriver supports relative file paths? Because when I'm trying to use
CRawDisk::InstallDriver(L"elrawdsk.sys", "EldoS_RawDisk", reboot);

instead of
CRawDisk::InstallDriver(L"C:\\rawdisk\\location\\path\\elrawdsk.sys", "EldoS_RawDisk", reboot);

I recive an ERDError. Driver and my_app.exe file are in the same directory.

Thanks from advance :),
Posted: 12/02/2013 05:50:38
by Eugene Mayevski (Team)

MSDN strongly discourages against using "current directory" concept in your applications. So you should use absolute paths wherever possible.

Sincerely yours
Eugene Mayevski
Also by EldoS: MsgConnect
Cross-platform protocol-independent communication framework for building peer-to-peer and client-server applications and middleware components.



Topic viewed 7845 times

Number of guests: 1, registered members: 0, in total hidden: 0


Back to top

As of July 15, 2016 EldoS business operates as a division of /n software, inc. For more information, please read the announcement.

Got it!