หลังสามวันที่ไร้การเขียนโปรแกรม ชีวิตนี้ก็หามีความหมายไม่

Group Blog

 
All Blogs

 

Harddisk Serial


//#define _WIN32_WINNT 0x500

#include

//#include



#include

struct IDEREGS {

BYTE bFeaturesReg; // Used for specifying SMART "commands".

BYTE bSectorCountReg; // IDE sector count register

BYTE bSectorNumberReg; // IDE sector number register

BYTE bCylLowReg; // IDE low order cylinder value

BYTE bCylHighReg; // IDE high order cylinder value

BYTE bDriveHeadReg; // IDE drive/head register

BYTE bCommandReg; // Actual IDE command.

BYTE bReserved; // reserved for future use. Must be zero.

};



typedef struct SENDCMDINPARAMS {

DWORD cBufferSize; // Buffer size in bytes

IDEREGS irDriveRegs; // Structure with drive register values.

BYTE bDriveNumber; // Physical drive number to send

// command to (0,1,2,3).

BYTE bReserved[3]; // Reserved for future expansion.

DWORD dwReserved[4]; // For future use.

BYTE bBuffer[1]; // Input buffer.

};



struct DRIVERSTATUS

{



char DriveError;

char IDEStatus;

char Reserved[2];

int Reserved2[2];

};





struct IDSECTOR

{

short int GenConfig,

NumberCylinders,

Reserved,//2

NumberHeads,//3

BytesPerTrack,//4

BytesPerSector,//5

SectorsPerTrack,//6

VendorUnique[3]; //7



char SerialNumber[20];// As Char '10

short int BufferClass, //20

BufferSize,//21

ECCSize;//22

char FirmwareRevision[8];// As Char '23

char ModelNumber[40];// As Char '27

short int MoreVendorUnique,//47

DoubleWordIO,//48

Capabilities,//49

Reserved1,//50

PIOTiming,//51

DMATiming,//52

BS,//53

NumberCurrentCyls,//54

NumberCurrentHeads,//55

NumberCurrentSectorsPerTrack;//56



int CurrentSectorCapacity;//57

short int MultipleSectorCapacity,//59

MultipleSectorStuff;//60



int TotalAddressableSectors;//61

short int SingleWordDMA,//63

MultiWordDMA;//64



char Reserved2[382];//65



};





struct SENDCMDOUTPARAMS2

{

int BufferSize;

DRIVERSTATUS Status;

IDSECTOR IDS;

};



// CHarddiskSerialDlg dialog

//function void getharddiskserial(char drivename,char *serial);

void getharddiskserial(char drivename,char *serial)

{

if (serial == NULL) return;

SENDCMDINPARAMS sci;

SENDCMDOUTPARAMS2 sco;

HANDLE handle = NULL;

char strHD[256];



memset(&sci,0,sizeof(sci));

memset(&sco,0,sizeof(sco));



sprintf(strHD,"\\\\.\\%c:",drivename);

//sprintf(strHD,"\\\\.\\PhysicalDrive%d",driveNumber);

handle = CreateFileA(strHD, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);

if (INVALID_HANDLE_VALUE == handle)

{

sprintf(strHD,"\\\\.\\PhysicalDrive%c",drivename);

handle = CreateFileA(strHD, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);

}

if (INVALID_HANDLE_VALUE == handle)

{

sprintf(strHD,"\\\\.\\Scsi%c",drivename);

handle = CreateFileA(strHD, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);

}

if (INVALID_HANDLE_VALUE == handle)//win 9x

{

sprintf(strHD,"\\\\.\\Smartvsd%c",drivename);

handle = CreateFileA(strHD, 0,0,0,CREATE_NEW, 0, 0);

}

if (INVALID_HANDLE_VALUE == handle)

{

serial[0] = 0;

return;

}



sci.bDriveNumber = drivename;

sci.cBufferSize = sizeof(sco);

sci.irDriveRegs.bDriveHeadReg = (char)(0xA0 | (drivename << 5));

sci.irDriveRegs.bCommandReg = 0xEC;

sci.irDriveRegs.bSectorCountReg = 1;

sci.irDriveRegs.bSectorNumberReg = 1;



DWORD returnSize = 0;



if (DeviceIoControl(handle,0x7C088, &sci, sizeof(sci), &sco, sizeof(sco), &returnSize, 0) != 0)

{

for (int i = 18; i >= 0; i--)

{

if (sco.IDS.SerialNumber[i] != ' ')

{

sco.IDS.SerialNumber[i+1] = 0;

break;

}

}

strcpy(serial,sco.IDS.SerialNumber);

}else{

serial[0] = 0;

}

CloseHandle(handle);



}


 

Create Date : 06 กุมภาพันธ์ 2550
Last Update : 6 กุมภาพันธ์ 2550 15:45:55 น.  

ให้ตายเถอะ

เมื่อวานนั่งเขียน ActiveX Control ตามที่โดนสั่งมา
นั่งเขียนๆๆๆ และเขียนจนถึงขั้นตอนรับส่ง Message จากโปรแกรมอื่นเพื่อที่จะให้ Active สั่ง Fire Event

เขียนอยู่แป๊บนึงก็เสร็จ(แหม งานหมูๆ)

พอลองเทศดู โอ้ๆๆ รันผ่านฉลุย ไร้ Error
ก็เลยปิดโปรแกรมทดสอบ เท่านั้นแหละ Error เด้ง ขึ้นมาเลย
หลังจากนั้นก็นั่งมึนอยู่ข้ามคืน จนมานึกขึ้นได้ว่า
ลืมส่ง Message ให้กับ Ole อีกทอดนึง (เวรจริงๆ - -! )

COleControl::OnWndMsg(message,wParam,lParam,pResult);
ไม่น่าลืมเลย เสียเวลาจริงๆ จำจนตายเลย

 

Create Date : 02 ธันวาคม 2549
Last Update : 2 ธันวาคม 2549 6:48:08 น.  

Code

ActiveX on Internet Explorer
http://www.codeproject.com/com/CompleteActiveX.asp

Source Code
http://www.programmersheaven.com/zone3/index.htm

 

Create Date : 28 กันยายน 2549
Last Update : 28 กันยายน 2549 13:54:36 น.  

Create Dir


void CLoad::CreateDir(char *path)
{
int len=strlen(path);
char str[255];
memset(str,0,sizeof(str));
for (int i=0;i {
if (path[i]=='\\')
{
CreateDirectoryA(str,NULL);
}
str[i]=path[i];
}
CreateDirectoryA(path,NULL);

}

 

Create Date : 20 เมษายน 2549
Last Update : 20 เมษายน 2549 22:17:16 น.  

HTTP Recieve file type 'Chunk'


int CLoad::ChunkLoad(char *data,int &len,char *chunkbyte,int &cntchunk,int &chunksize,char *recvdata)
{
//cntchunk ; //cnt byte in chunk size
int readsize = 0;
int ret = 0;
if (len==0)
{
return -1;
}else{
char *tmp=data;
if (cntchunk)
{
while (len)
{
if (cntchunk >= 10 /*sizeof(chunksize)*/)
{
len=0;
break;
}
chunkbyte[cntchunk++]=*tmp;
tmp++;
len--;
if (cntchunk>2 &&
chunkbyte[cntchunk-1]=='\n')
{
sscanf(chunkbyte+2,"%x",&chunksize);
break;
}
}
}else if (chunksize == -1){
while (len--)
{
if (cntchunk >= 10 /*sizeof(chunkbyte)*/)
{
len=0;
break;
}
chunkbyte[cntchunk++]=*tmp;
if (*tmp=='\n')
{
sscanf(chunkbyte,"%x",&chunksize);
cntchunk = 0;
tmp++;
break;
}
tmp++;
}
}

// cntchunk=0;
while (len)
{
if (len>=chunksize)
{
memcpy(recvdata + readsize,tmp,chunksize);
readsize += chunksize;

tmp+=chunksize;
len-=chunksize;

//prevent for uncomplete end of line (\r\n)
if (len>=2)
{
//if more than2
//then set data of vhunk size to array
chunkbyte[cntchunk++]='\r';
chunkbyte[cntchunk++]='\n';
tmp+=2;
len-=2;
while (len--)
{
if (cntchunk >= 10 /*sizeof(chunkbyte)*/)
{
ret = 1;
len=0;
break;
}
chunkbyte[cntchunk++]=*tmp;
if (*tmp=='\n')
{
tmp++;
break;
}
tmp++;
}
}else if (len==1){
//if ==1 set \r
chunkbyte[cntchunk++]='\r';
}
if (ret == 1)
break;
//if data complete use sscanf
if (cntchunk>2 &&
chunkbyte[cntchunk-1]=='\n')
{
sscanf(chunkbyte+2,"%x",&chunksize);
cntchunk=0;
}
if (chunksize==0)
{
break;
}
if (len<=0) break;
}else{

chunksize=chunksize-len;
memcpy(recvdata + readsize,tmp,len);
readsize += len;

tmp+=len;
len=0;
}//if (len>=download[index].chunksize)
} //while (len)
} //if (len==0)

return readsize;
}

 

Create Date : 02 เมษายน 2549
Last Update : 20 เมษายน 2549 22:16:56 น.  

1  2  

soginal

Location :

[Profile ทั้งหมด]


My FriendFlock
ฝากข้อความหลังไมค์
Rss Feed [?]


 
Friends' blogs
[Add soginal's blog to your weblog]
Links
 

 

Pantip-Cafe | Pantip-TechExchange | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.