08. september 2004 - 13:19Der er
4 kommentarer og 2 løsninger
Genkendelse af DLL filer
Jeg har en række filer i en mappe! Spørgsmålet er, hvordan jeg kan vide om en tilfældig fil er en DLL-fil eller ej! (Vel og mærket uden at skulle kigge på filens efternavn)!
Hvis jeg bruger funktionen LoadLibrary() opstår en fejl meddelse, meget naturligt, når filen ikke er en DLL-fil! Denne fejlmeddelse vil jeg gerne ungå og tænkte at man selv kunne checke om en fil er af typen DLL eller ej!
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
LoadLibrary Retunerer 0 hvis det enten ikke er en DLL fil eller ikke er mulig at loade den .. Se etv MSDN
Ellers kig lidt på det her, det burde kunne indspirere dig til noget :
Type TExetype = ( etUnknown, etDOS, etWinNE, etWinPE ); TExeStrings = Array [TExetype] of String[30];
const ExeStrings : TExeStrings = ('Unknown file type', 'Dos executable', 'Windows 16 bit executable', 'Windows 32 bit executable' );
Function GetExetype( Const fname: String ): TExetype; Var Signature: Word; WinHdrOffset: Word; Fexe: TFileStream; Begin result := etUnknown; Fexe := TFileStream.Create( fname, fmOpenRead or fmShareDenyNone); Fexe.ReadBuffer( signature, Sizeof(signature));
If signature = $5A4D { 'MZ' } Then begin result := etDOS; Fexe.Seek( $18, soFromBeginning ); Fexe.ReadBuffer( WinHdrOffset, Sizeof(WinHdrOffset));
If WinHdrOffset >= $40 Then begin Fexe.Seek( $3C, soFromBeginning ); Fexe.ReadBuffer( WinHdrOffset, Sizeof(WinHdrOffset)); Fexe.Seek( WinHdrOffset, soFrombeginning ); Fexe.ReadBuffer( signature, Sizeof(signature)); If Signature = $454E { 'NE' } Then Result := etWinNE else If signature = $4550 { 'PE' } Then Result := etWinPE; end; { If } end; { If } Fexe.Free; End;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.