Search  
Wednesday, May 23, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Win32 API  Serie HDD...
 Serie HDD
 
 8/9/2005 9:49:39 PM
User is offlineGhiorghiu Bogdan
928 posts
1st




Serie HDD
 (Romania)

Se poate citi cu Win 32 API (sau in alt mod) seria fizica a HardDisk-ului ?

Pt. a folosii la securitatea aplicatiei!


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 8/10/2005 12:27:26 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Serie HDD
 (Romania)
Avea Cristi Comanescu un dll care extragea informatiile astea si pentru hard-discuri SATA, parca. Eu am ceva, da' nu merge cu SATA.
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 8/10/2005 8:12:44 AM
User is offlineanonymous
0 posts


Re: Serie HDD
 (Romania)
A pus la un moment dat cineva pe grup un exemplu cu functii api care scotea seria fizica si pentru sata. O sa incerc sa caut exemplul si sa-l pun aici sa ramana pe veci :).
 8/10/2005 8:21:06 AM
User is offlineanonymous
0 posts


Re: Serie HDD
 (Romania)

Ok, l-am gasit. Codul a fost postat pe grup de Cristian Comanescu:

--------------------------
DECLARE INTEGER CloseHandle IN kernel32 ;
INTEGER hObject

DECLARE INTEGER CreateFile IN kernel32 ;
STRING lpFileName,;
INTEGER dwDesiredAccess,;
INTEGER dwShareMode,;
INTEGER lpSecurityAttributes,;
INTEGER dwCreationDisposition,;
INTEGER dwFlagsAndAttributes,;
INTEGER hTemplateFile

DECLARE INTEGER DeviceIoControl IN kernel32 ;
INTEGER hDevice,;
INTEGER dwIoControlCode,;
STRING @lpInBuffer,;
LONG nInBufferSize,;
STRING @lpOutBuffer,;
LONG nOutBufferSize,;
INTEGER @lpBytesReturned,;
INTEGER lpOverlapped

DECLARE INTEGER GetLogicalDriveStrings IN Win32API ;
INTEGER buflen,;
STRING @buf
DECLARE INTEGER GetDriveType IN Win32API STRING cpath
DECLARE INTEGER GetVolumeInformation IN Win32API ;
STRING lpRootPathName,;
STRING @lpVolumeNameBuffer,;
INTEGER nVolumeNameSize,;
LONG @lpVolumeSerialNumber,;
INTEGER @lpMaximumComponentLength,;
INTEGER @lpFileSystemFlags,;
STRING @lpFileSystemNameBuffer,;
INTEGER nFileSystemNameSize

LOCAL m.buflen, m.buf
m.buflen = 104
m.buf = REPLICATE(CHR(0), m.buflen)
GetLogicalDriveStrings(m.buflen, @m.buf)
m.buf = CHRTRAN(m.buf, CHR(0) + "\:","")
m.str1 = ""
FOR m.i=1 TO LEN(m.buf)
m.drvtype = GetDriveType(SUBSTR(m.buf, m.i, 1) + ":\")
IF m.drvtype = 3
m.str1 = m.str1 + SUBSTR(m.buf, m.i, 1)
ENDIF
NEXT

FOR m.i = 1 TO LEN(m.str1)
m.vnb = REPLICATE(CHR(0),64)
m.vnbs = 64
m.vsn = 0
m.mcl = 0
m.fsf = 0
m.fsnb = REPLICATE(CHR(0),10)
m.fsnbs = 10

GetVolumeInformation(SUBSTR(m.str1,m.i,1) + ":\", @m.vnb, m.vnbs,
@m.vsn, @m.mcl, @m.fsf, @m.fsnb, m.fsnbs)
IF m.vsn < 0
m.vsn = m.vsn + 168
ENDIF
m.vsn = PADL(ALLTRIM(SUBSTR(TRANSFORM(m.vsn,"@0"), 3)), 8, "0")
m.drivenumber = ASC(SUBSTR(m.str1, m.i, 1)) - ASC("C")
handle = CreateFile("\\.\" + CHR(ASC("c") + m.drivenumber) + ":",
0xC0000000, 3, 0, 3, 0, 0)
m.sn = ""
m.mod = ""
m.rev = ""
IF handle <> -1
m.sci =""
m.sci = m.sci + CHR(0) + CHR(2) + CHR(0) + CHR(0)
m.sci = m.sci + CHR(0)
m.sci = m.sci + CHR(1)
m.sci = m.sci + CHR(1)
m.sci = m.sci + CHR(0)
m.sci = m.sci + CHR(0)
m.sci = m.sci + CHR(0xA0)
m.sci = m.sci + CHR(0xEC)
m.sci = m.sci + CHR(0)
m.sci = m.sci + CHR(0)
m.sci = m.sci + REPLICATE(CHR(0), 499)
m.sco = REPLICATE(CHR(0), 2048)
m.ret_buffersize = 0
m.otv=DeviceIoControl( handle,;
0x7C088,;
@m.sci,;
LEN(sci),;
@m.sco,;
LEN(sco),;
@m.ret_buffersize,;
0;
)
CloseHandle(handle)
IF m.otv <> 0
m.sn = CHRTRAN( ALLTRIM( conv21( SUBSTR(m.sco, 37, 20) ) ),
CHR(0), "")
m.rev = CHRTRAN( ALLTRIM( conv21( SUBSTR(m.sco, 63, 8) ) ),
CHR(0), "")
m.mod = CHRTRAN( ALLTRIM( conv21( SUBSTR(m.sco, 71, 40) ) ),
CHR(0), "")
ENDIF
ENDIF
IF EMPTY(m.sn)
handle = CreateFile("\\.\" + CHR(ASC("c") + m.drivenumber) +
":", 0x00000000, 3,0, 3, 0, 0)
IF handle <> -1
m.sn = ""
m.mod = ""
m.rev = ""
m.sci = REPLICATE(CHR(0),1024)
m.sco = REPLICATE(CHR(0),1024)
m.ret_buffersize = 0
m.otv = DeviceIoControl( handle,;
0x2D1400,;
@m.sci,;
LEN(sci),;
@m.sco,;
LEN(sco),;
@m.ret_buffersize,;
0;
)
CloseHandle(handle)
IF m.otv <> 0
m.pos0 = ASC(SUBSTR(m.sco,13,1))
m.pos1 = ASC(SUBSTR(m.sco,17,1))
IF m.pos0 > 0
m.pos1 = m.pos0
ENDIF
m.pos2 = ASC(SUBSTR(m.sco, 21, 1))
m.pos3 = ASC(SUBSTR(m.sco, 25, 1))
m.mod = SUBSTR(m.sco, m.pos1+1, m.pos2 - m.pos1)
m.pos4 = AT(CHR(0), m.mod)
IF m.pos4 > 0
m.mod = ALLTRIM(CHRTRAN(m.mod, CHR(0), ""))
ENDIF
IF m.pos3 > m.pos2
m.rev = SUBSTR(m.sco, m.pos2+1, m.pos3 - m.pos2)
ELSE
m.rev = SUBSTR(m.sco, m.pos2+1)
ENDIF
m.pos4 = AT(CHR(0), m.rev)
IF m.pos4 > 0
m.rev = ALLTRIM(LEFT(m.rev, m.pos4 - 1))
ENDIF
IF m.pos3 > 0
m.pos3 = m.pos3 + 1
m.sco1 = SUBSTR(m.sco, m.pos3, 40)
m.sco1 = ALLTRIM(m.sco1)
m.sn = ""
m.pos3 = 1
FOR m.j = 1 TO 20
m.ch1 = CHR(EVALUATE("0x" +
ALLTRIM(SUBSTR(m.sco1, m.pos3, 2))))
m.pos3 = m.pos3 + 2
m.ch2 = CHR(EVALUATE("0x" +
ALLTRIM(SUBSTR(m.sco1, m.pos3, 2))))
m.pos3 = m.pos3 + 2
m.sn = m.sn + m.ch2 + m.ch1
ENDFOR
m.sn = ALLTRIM(CHRTRAN(m.sn, CHR(0), ""))
ELSE
m.sn = ""
ENDIF
ENDIF
ENDIF
ENDIF
?SUBSTR(m.str1, m.i, 1) + ":\ VolSN: " + m.vsn + " " +
CHRTRAN(m.fsnb, CHR(0), "") + "Model: " + m.mod + " Revision: " + m.rev
+ " Serial: " + m.sn
ENDFOR

*/===============================================
FUNCTION conv21
*/===============================================
LPARAMETERS m.str
IF LEN(m.str)%2 = 1
m.str = m.str + " "
ENDIF
LOCAL m.i, m.str2
m.str2 = ""
FOR m.i=1 TO LEN(m.str)
m.str2 = m.str2 + SUBSTR(m.str, m.i + IIF(m.i%2=0, -1, 1), 1)
ENDFOR
RETURN m.str2

 8/10/2005 8:59:53 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Serie HDD
 (Romania)

Buna treaba, Cristi!

Cred ca intrarea asta a fost pusa de cel putin 20 de ori pe lista... :)


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 8/10/2005 9:10:31 AM
User is offlineGhiorghiu Bogdan
928 posts
1st




Re: Serie HDD
 (Romania) Modified By Ghiorghiu Bogdan  on 8/11/2005 8:27:09 PM)

Imi cer scuze ca am relansat acesta intrebare dar nu gasisem nicaieri raspunsul.

Va multumesc foarte mult pentru ajutor.


Ghiorghiu Bogdan >>> Dacă tot te apuci să faci o treabă, fă-o bine de la inceput!
 8/31/2005 2:42:10 PM
User is offlineEugen Gliga
1052 posts
1st




Re: Serie HDD
 (Romania)
Am incercat sa aflu seria volumului ( aia afisata de comanda Label ) folosind acest cod, dar functia GetVolumeInformation imi intorcea doar numere negative, care nu pot fi convertite in Hex cu functia Transform. Am ajuns la concluzia ca numarul care trebuie adunat la vsn in cazul in care acesta este negativ, ar trebui sa fie  altul. Mie imi merge cu urmatoarea secventa:
    IF m.vsn < 0
     *m.vsn = m.vsn + 168
      m.vsn= m.vsn + 4294967296
    ENDIF


Neagu


 8/31/2005 4:29:45 PM
User is offlineanonymous
0 posts


Re: Serie HDD
 (Romania)
Poate sa dea si negativ.
 8/31/2005 4:33:09 PM
User is offlineanonymous
0 posts


Re: Serie HDD
 (Romania) Modified By anonymous  on 8/31/2005 4:33:59 PM)
Scuze. Abia dupa ce am scris am citit cum trebuie.
 9/22/2005 8:10:32 PM
User is offlineEugen Gliga
1052 posts
1st




Re: Serie HDD
 (Romania)
Am folosit intr-o aplicatie, functiile din acest exemplu pt a citi seria hdd-ului si seria volumului. In teste totul este Ok, insa instaland aplicatia pe un computer cu w98, am observat ca nu mai citeste decat seria volumului. Probabil ca una din functiile folosite nu exista pe w98 si din pacate nu mai dispun de nici un calculator cu acest sistem. Stie cineva care ar fi motivul ?


 9/22/2005 9:32:57 PM
User is offlineanonymous
0 posts


Re: Serie HDD
 (Romania)

Daca n-are fi functia api ar da eroare cand incerci s-o declari. Dar cred ca hardul nu intoarce seria pe care i-o cere windows-ul, de aia cred ca este mai sigur sa-ti protejezi aplicatia folosind seria volumului.

 9/22/2005 10:32:21 PM
User is offlineAlex Dobrin
766 posts
www.algis.ro
1st






Re: Serie HDD
 (N/A)
Am si eu aceeasi problema. Cred ca este de la Win98. Am incercat pe mai multe computere cu configuratii diferite si pe nici unul nu mi-a intors seria hdd. Incerc sa gasesc o solutie si daca reusesc o postez si aici.
Alex Dobrin
Algis Info
 9/22/2005 10:55:00 PM
User is offlineEugen Gliga
1052 posts
1st




Re: Serie HDD
 (Romania)
Si eu cred ca este de la w98, dar dupa cum a zis Cristi, daca nu da eroare, inseamna ca functia exista. S-ar putea insa, sa nu fie la fel de versatila ca cea de pe XP si sa nu recunoasca anumite tipuri de hdd. Vechiul dll stiu ca mergea bine pe w98. Mai testez si eu, dar nu prea am w98-uri cu VFP pe ele la indemana.






 9/23/2005 7:56:17 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Serie HDD
 (Romania)

Declare Integer Grigore In user32.dll

Instructiunea de mai sus merge perfect :) Eroarea apare cand incerci sa apelezi functia, nu cand o declari.


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 9/23/2005 8:33:33 AM
User is offlineanonymous
0 posts


Re: Serie HDD
 (Romania)
Da, cand incerci sa apelezi functia m-am referit, dar se pare ca nici atunci nu da eroare.
 9/23/2005 1:40:52 PM
User is offlineEugen Gliga
1052 posts
1st




Re: Serie HDD
 (Romania)
De unde stim ca nu este o functie nedocumentata cu numele asta ? :)

ps.: Azi sunt foarte bucuros. Am primit kitul de upgrade la VFP9.



 9/23/2005 4:11:46 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Serie HDD
 (Romania)
Pentru ca daca ar fi fost, ar fi facut orice, hehe... grigore("fa-mi balanta aia, da' repede ca ma grabesc"). Si pac, balanta pe ecran.
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 10/13/2005 11:59:48 PM
User is offlineAlex Dobrin
766 posts
www.algis.ro
1st






Re: Serie HDD
 (N/A)
Functia de la FAQ nu merge pe Win9x pentru ca CreateFile nu se are toate functiile din WinXp sau Win2000. Am revenit la dll-ul care a mai fost postat pe forum si care merge si pe Win98 (l-am testat). Am pus la profox.algis.ro un exemplu. Nu l-am testa pe SATA, dar o sa o fac zielele astea si revin cu detalii.
Alex Dobrin
Algis Info
 10/14/2005 12:46:43 AM
User is offlineEugen Gliga
1052 posts
1st




Re: Serie HDD
 (Romania)
Am observat si eu:

Windows Me/98/95:   The file system restricts CreateFile to creating or opening files. You cannot create or open the objects that are identified in the first paragraph of this topic.

Pacat, era mai fain cu functii API decat cu dll-ul. Poate stie cineva cum se poate ocoli functia CreateFile.

Neagu


 10/14/2005 12:52:58 AM
User is offlineAlex Dobrin
766 posts
www.algis.ro
1st






Re: Serie HDD
 (N/A)
Eu le-am lasat pe amandoua. Daca API nu-mi intoarce nici un serial folosesc dll. Nu sunt sigur dar parca nu mergea pe SATA dll-ul.
Alex Dobrin
Algis Info
 10/14/2005 1:06:39 AM
User is offlineEugen Gliga
1052 posts
1st




Re: Serie HDD
 (Romania)
Si eu le-am lasat pe amandoua pe moment. Dll-ul nu merge pe SATA, dar nici nu prea s-a pus SATA pe 98.  Sper sa se gaseasca o solutie, sa scapam de dll, daca nu, pana la urma va dispare 98-ul singur. :)

Neagu

  Visual FoxPro  Win32 API  Serie HDD...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement