بهروز عباسی
پنج شنبه 17 مرداد 1392, 15:24 عصر
درود به همه
من باید یه تابع بنویسم که محتویات MBR رو بخونه و به در قالب یک رشته با فرمت Hex برگردونه ؛برای این کار تابع زیرو نوشتم (برنامه کامل رو میذارم) ولی یه مشکل دارم چطوری مقدار به دست آمده رو به فرمت Hex در بیارم و توی یک متغیر (LPSTR) بریزم و به عنوان خروجی تابع به روتین فراخوان ارسالش کنم ؟
در واقع من لازم دارم این تابع رو توی یک DLL قرار بدم برای همین هم مهمه که بتونم مقدار خونده شده رو توی تابع به فرمت Hex در بیارم و ارسال کنم
کد در حالت اول که نتیجه رو اون طور که باید نشون میده (البته فقط توی کنسول و با استفاده از printf و نه در خروجی تابع)
#include <Windows.h>
#include <iostream>
//#include <conio.h>
using namespace std;
//void highlightHex(short X, short Y, HANDLE hConsole, BOOL bReset);
LPSTR GET_MBR();
int main() {
DWORD dwAddress = 0; short i = 8; HANDLE hConsole; BOOL bContinue = TRUE;
int curPosX = 0, curPosY = 0; COORD consoleCoord;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTitleA("Get_MBR");
cout<<GET_MBR()<<endl;
system("pause");
return 0;
}
LPSTR GET_MBR() {
DWORD BytRet;
unsigned char Sector[1024];
char _Result[1024];
HANDLE hDrive;
hDrive = CreateFileA(LPSTR("\\\\.\\C:"), GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDrive != INVALID_HANDLE_VALUE) {
if (ReadFile(hDrive, Sector, sizeof(Sector), &BytRet, NULL) == 0) {
printf(("ReadFile() error %08X\n"), GetLastError());
}
CloseHandle(hDrive);
}
else {
printf("CreateFile() error %08X\n", GetLastError());
}
for (int i = 512; i < 1024; i++) {
//[i]=Sector[i];
//
printf("%X ", Sector[i]);
}
return(" ");
}
اینم خروجی !
108754
--------------------------------------------------------------------------------------------------
اینم کدی که باید درست بشه ،درواقع باید به این شکل استفاده بشه
#include <Windows.h>
#include <iostream>
#include <conio.h>
using namespace std;
void highlightHex(short X, short Y, HANDLE hConsole, BOOL bReset);
LPSTR GET_MBR();
int main() {
DWORD dwAddress = 0;
short i = 8;
HANDLE hConsole;
BOOL bContinue = TRUE;
int curPosX = 0, curPosY = 0;
COORD consoleCoord;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTitleA("Get_MBR");
cout << GET_MBR() << endl;
system("pause");
return 0;
}
LPSTR GET_MBR() {
DWORD BytRet;
unsigned char Sector[1024];
char _Result[1024];
HANDLE hDrive;
hDrive = CreateFileA(LPSTR("\\\\.\\C:"), GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDrive != INVALID_HANDLE_VALUE) {
if (ReadFile(hDrive, Sector, sizeof(Sector), &BytRet, NULL) == 0) {
printf(("ReadFile() error %08X\n"), GetLastError());
}
CloseHandle(hDrive);
}
else {
printf("CreateFile() error %08X\n", GetLastError());
}
for (int i = 512; i < 1024; i++) {
_Result[i]=Sector[i];
//
//printf("%X ", Sector[i]);
}
return (_Result);
}
البته این درسته ولی مشکل همون فرمته Hex اه
اینم خروجی این تابع
108755
اگه قرار باشه اون متغییر Sector به این صورت نباشه یعنی تعداد خونه هاش مشخص نباشه باید چطوری اونو به خروجی پاس بدم ؟
unsigned char Sector; // or byte Sector
من باید یه تابع بنویسم که محتویات MBR رو بخونه و به در قالب یک رشته با فرمت Hex برگردونه ؛برای این کار تابع زیرو نوشتم (برنامه کامل رو میذارم) ولی یه مشکل دارم چطوری مقدار به دست آمده رو به فرمت Hex در بیارم و توی یک متغیر (LPSTR) بریزم و به عنوان خروجی تابع به روتین فراخوان ارسالش کنم ؟
در واقع من لازم دارم این تابع رو توی یک DLL قرار بدم برای همین هم مهمه که بتونم مقدار خونده شده رو توی تابع به فرمت Hex در بیارم و ارسال کنم
کد در حالت اول که نتیجه رو اون طور که باید نشون میده (البته فقط توی کنسول و با استفاده از printf و نه در خروجی تابع)
#include <Windows.h>
#include <iostream>
//#include <conio.h>
using namespace std;
//void highlightHex(short X, short Y, HANDLE hConsole, BOOL bReset);
LPSTR GET_MBR();
int main() {
DWORD dwAddress = 0; short i = 8; HANDLE hConsole; BOOL bContinue = TRUE;
int curPosX = 0, curPosY = 0; COORD consoleCoord;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTitleA("Get_MBR");
cout<<GET_MBR()<<endl;
system("pause");
return 0;
}
LPSTR GET_MBR() {
DWORD BytRet;
unsigned char Sector[1024];
char _Result[1024];
HANDLE hDrive;
hDrive = CreateFileA(LPSTR("\\\\.\\C:"), GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDrive != INVALID_HANDLE_VALUE) {
if (ReadFile(hDrive, Sector, sizeof(Sector), &BytRet, NULL) == 0) {
printf(("ReadFile() error %08X\n"), GetLastError());
}
CloseHandle(hDrive);
}
else {
printf("CreateFile() error %08X\n", GetLastError());
}
for (int i = 512; i < 1024; i++) {
//[i]=Sector[i];
//
printf("%X ", Sector[i]);
}
return(" ");
}
اینم خروجی !
108754
--------------------------------------------------------------------------------------------------
اینم کدی که باید درست بشه ،درواقع باید به این شکل استفاده بشه
#include <Windows.h>
#include <iostream>
#include <conio.h>
using namespace std;
void highlightHex(short X, short Y, HANDLE hConsole, BOOL bReset);
LPSTR GET_MBR();
int main() {
DWORD dwAddress = 0;
short i = 8;
HANDLE hConsole;
BOOL bContinue = TRUE;
int curPosX = 0, curPosY = 0;
COORD consoleCoord;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTitleA("Get_MBR");
cout << GET_MBR() << endl;
system("pause");
return 0;
}
LPSTR GET_MBR() {
DWORD BytRet;
unsigned char Sector[1024];
char _Result[1024];
HANDLE hDrive;
hDrive = CreateFileA(LPSTR("\\\\.\\C:"), GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDrive != INVALID_HANDLE_VALUE) {
if (ReadFile(hDrive, Sector, sizeof(Sector), &BytRet, NULL) == 0) {
printf(("ReadFile() error %08X\n"), GetLastError());
}
CloseHandle(hDrive);
}
else {
printf("CreateFile() error %08X\n", GetLastError());
}
for (int i = 512; i < 1024; i++) {
_Result[i]=Sector[i];
//
//printf("%X ", Sector[i]);
}
return (_Result);
}
البته این درسته ولی مشکل همون فرمته Hex اه
اینم خروجی این تابع
108755
اگه قرار باشه اون متغییر Sector به این صورت نباشه یعنی تعداد خونه هاش مشخص نباشه باید چطوری اونو به خروجی پاس بدم ؟
unsigned char Sector; // or byte Sector