what you don't know can hurt you
Home Files News &[SERVICES_TAB]About Contact Add New

versioner-03.cpp

versioner-03.cpp
Posted Oct 21, 1999
Authored by Vacuum, rhino9 | Site technotronic.com

Versioner 0.3: Source code. Versioner is a command line tool that traverses directories gathering the file properties described below. Versioner will output its information in a human readable text format as well as a comma seperated version that can be imported directly into MS-Excel or MS-Access. It is useful to anyone who wishes to maintain control over file versions from either a security or compatibility aspect.

SHA-256 | 28bbb22f26396a6e8197e439794bb2e3e2a85e69452559a6606698ebb15ffda9

versioner-03.cpp

Change Mirror Download
/*
* Versioner 2 Development Code
* Copyright (C) 1999 Kirby Kuehl (vacuum@technotronic.com)
*
* Link with version.lib
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 1, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/




#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#define VERSION "Versioner 0.3"


// prints information about a file in text format

void PrintFindData(FILE *stream, WIN32_FIND_DATA *findData, char *dirName)
{
FILETIME ft;
SYSTEMTIME st;
DWORD dwVerInfoSize;
DWORD dwVerHnd=0;
BOOL bRetCode;
LPSTR lpBuffer;
UINT* dwBytes = new UINT;
char *fileName;
char fullName[256];


if(!GetFullPathName(findData->cFileName,
256,
fullName,
&fileName))
// return;


fprintf(stream, "__________________________________________________________________________\n");
printf("%s\n",fullName);
fprintf(stream, "Filename: %s\nSize: %d bytes\n",fullName, findData->nFileSizeLow);
// ftCreation Time
FileTimeToLocalFileTime(&findData->ftCreationTime, &ft);
FileTimeToSystemTime(&ft, &st);
// printf("Creation Time: %d/%d/%d %d:%d\n", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute);
fprintf(stream, "Creation Time: %d/%d/%d %d:%d\n", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute);
// ftLastAccessTime
FileTimeToLocalFileTime(&findData->ftLastAccessTime , &ft);
FileTimeToSystemTime(&ft, &st);
// printf("Last Access Time: %d/%d/%d %d:%d\n", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute);
fprintf(stream, "Last Access Time: %d/%d/%d %d:%d\n", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute);
// ftLastWriteTime
FileTimeToLocalFileTime(&findData->ftLastWriteTime, &ft);
FileTimeToSystemTime(&ft, &st);
// printf("Last Write Time: %d/%d/%d %d:%d\n", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute);
fprintf(stream, "Last Write Time: %d/%d/%d %d:%d\n", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute);


dwVerInfoSize = GetFileVersionInfoSize(findData->cFileName, &dwVerHnd);
if (dwVerInfoSize)
{
LPTSTR lpstrVffInfo;

HANDLE hMem;
hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
lpstrVffInfo = (char *)GlobalLock(hMem);
GetFileVersionInfo(findData->cFileName, dwVerHnd, dwVerInfoSize, lpstrVffInfo);

// Company Name
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\CompanyName"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
// printf("Company Name: %s\n",lpBuffer);
fprintf(stream, "Company Name: %s\n",lpBuffer);
}
else
fprintf(stream, "Company Name:\n");
// File Description
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\FileDescription"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
// printf("File Description: %s\n",lpBuffer);
fprintf(stream, "File Description: %s\n",lpBuffer);
}
else
fprintf(stream, "File Description: \n");

// File Version
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\FileVersion"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
// printf("FileVersion: %s\n",lpBuffer);
fprintf(stream, "FileVersion: %s\n",lpBuffer);
}
else
fprintf(stream, "FileVersion: \n");

// Internal Name
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\InternalName"),
(LPVOID *)&lpBuffer , dwBytes);

if(bRetCode)
{
// printf("InternalName: %s\n",lpBuffer);
fprintf(stream, "InternalName: %s\n",lpBuffer);
}
else
fprintf(stream, "InternalName: \n");

// LegalCopyright
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\LegalCopyright"),
(LPVOID *)&lpBuffer , dwBytes);

if(bRetCode)
{
// printf("LegalCopyright: %s\n",lpBuffer);
fprintf(stream, "LegalCopyright: %s\n",lpBuffer);
}
else
fprintf(stream, "LegalCopyright:\n");

// OriginalFilename

bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\OriginalFilename"),
(LPVOID *)&lpBuffer , dwBytes);

if(bRetCode)
{
// printf("OriginalFilename: %s\n",lpBuffer);
fprintf(stream, "OriginalFilename: %s\n",lpBuffer);
}
else
fprintf(stream, "OriginalFilename: \n");
// ProductName

bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\ProductName"),
(LPVOID *)&lpBuffer , dwBytes);

if(bRetCode)
{
// printf("ProductName: %s\n",lpBuffer);
fprintf(stream, "ProductName: %s\n",lpBuffer);
}
else
fprintf(stream, "ProductName: \n");

// ProductVersion
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\ProductVersion"),
(LPVOID *)&lpBuffer , dwBytes);

if(bRetCode)
{
// printf("ProductVersion: %s\n",lpBuffer);
fprintf(stream, "ProductVersion: %s\n",lpBuffer);
}
else
fprintf(stream, "ProductVersion: \n");

// Comments

bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\Comments"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
// printf("Comments: %s\n",lpBuffer);
fprintf(stream, "Comments: %s\n",lpBuffer);
}
else
fprintf(stream, "Comments: \n");

// LegalTrademarks

bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\LegalTrademarks"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
// printf("LegalTrademarks: %s\n",lpBuffer);
fprintf(stream, "LegalTrademarks: %s\n",lpBuffer);
}
else
fprintf(stream, "LegalTrademarks: \n");

// PrivateBuild

bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\PrivateBuild"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
// printf("PrivateBuild: %s\n",lpBuffer);
fprintf(stream, "PrivateBuild: %s\n",lpBuffer);
}
else
fprintf(stream, "PrivateBuild: \n");

// SpecialBuild
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\SpecialBuild"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
// printf("SpecialBuild: %s\n",lpBuffer);
fprintf(stream, "SpecialBuild: %s\n",lpBuffer);
}
else
fprintf(stream, "SpecialBuild: \n");
}

// printf("\n\n");
fprintf(stream, "\n\n");



}

// prints information about a file in cvs format

void PrintFindData2(FILE *stream, WIN32_FIND_DATA *findData, char *dirName)
{
FILETIME ft;
SYSTEMTIME st;
DWORD dwVerInfoSize;
DWORD dwVerHnd=0;
BOOL bRetCode;
LPSTR lpBuffer;
UINT* dwBytes = new UINT;
char *fileName;
char fullName[256];


GetFullPathName(findData->cFileName, 256, fullName, &fileName);
fprintf(stream, "%s, %d, ",fullName, findData->nFileSizeLow);
// ftCreation Time
FileTimeToLocalFileTime(&findData->ftCreationTime, &ft);
FileTimeToSystemTime(&ft, &st);
fprintf(stream, "%d/%d/%d %d:%d, ", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute);
// ftLastAccessTime
FileTimeToLocalFileTime(&findData->ftLastAccessTime , &ft);
FileTimeToSystemTime(&ft, &st);
fprintf(stream, "%d/%d/%d %d:%d, ", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute);
// ftLastWriteTime
FileTimeToLocalFileTime(&findData->ftLastWriteTime, &ft);
FileTimeToSystemTime(&ft, &st);
fprintf(stream, "%d/%d/%d %d:%d, ", st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute);


dwVerInfoSize = GetFileVersionInfoSize(findData->cFileName, &dwVerHnd);
if (dwVerInfoSize)
{
LPTSTR lpstrVffInfo;

HANDLE hMem;
hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
lpstrVffInfo = (char *)GlobalLock(hMem);
GetFileVersionInfo(findData->cFileName, dwVerHnd, dwVerInfoSize, lpstrVffInfo);

// Company Name
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\CompanyName"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
fprintf(stream, "%s, ",lpBuffer);
}
else
fprintf(stream, ", ");
// File Description
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\FileDescription"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
fprintf(stream, "%s, ",lpBuffer);
}
else
fprintf(stream, ", ");

// File Version
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\FileVersion"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
fprintf(stream, "%s, ",lpBuffer);
}
else
fprintf(stream, ", ");

// Internal Name
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\InternalName"),
(LPVOID *)&lpBuffer , dwBytes);

if(bRetCode)
{
fprintf(stream, "%s ",lpBuffer);
}
else
fprintf(stream, ", ");

// LegalCopyright
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\LegalCopyright"),
(LPVOID *)&lpBuffer , dwBytes);

if(bRetCode)
{
fprintf(stream, "%s, ",lpBuffer);
}
else
fprintf(stream, ", ");

// OriginalFilename

bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\OriginalFilename"),
(LPVOID *)&lpBuffer , dwBytes);

if(bRetCode)
{
fprintf(stream, "%s ",lpBuffer);
}
else
fprintf(stream, ", ");
// ProductName

bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\ProductName"),
(LPVOID *)&lpBuffer , dwBytes);

if(bRetCode)
{
// printf("ProductName: %s\n",lpBuffer);
fprintf(stream, "%s, ",lpBuffer);
}
else
fprintf(stream, ", ");

// ProductVersion
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\ProductVersion"),
(LPVOID *)&lpBuffer , dwBytes);

if(bRetCode)
{
fprintf(stream, "%s ",lpBuffer);
}
else
fprintf(stream, ", ");

// Comments

bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\Comments"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
fprintf(stream, "%s ",lpBuffer);
}
else
fprintf(stream, ", ");

// LegalTrademarks

bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\LegalTrademarks"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
fprintf(stream, "%s ",lpBuffer);
}
else
fprintf(stream, ", ");

// PrivateBuild

bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\PrivateBuild"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
fprintf(stream, "%s ,",lpBuffer);
}
else
fprintf(stream, ", ");

// SpecialBuild
bRetCode = VerQueryValue((LPVOID)lpstrVffInfo,
TEXT("\\StringFileInfo\\040904E4\\SpecialBuild"),
(LPVOID *)&lpBuffer, dwBytes);
if(bRetCode)
{
fprintf(stream, "%s\n",lpBuffer);
}
else
fprintf(stream, "\n");
}
else
fprintf(stream, ", , , , , , , , , , ,\n");
}



// Recursively lists directories

void ListDirectoryContents(FILE *stream, FILE *stream2, char *dirName, char *fileMask)

{

char curDir[ 256 ];

char printDir[ 256 ];

HANDLE fileHandle;

WIN32_FIND_DATA findData;



// save current dir so it can restore it

if( !GetCurrentDirectory( 256, curDir) )

return;



// if the directory name is neither . or .. then

// change to it, otherwise ignore it

if( strcmp( dirName, "." ) &&

strcmp( dirName, ".." ) )

{

if( !SetCurrentDirectory( dirName ) )

return;

if( !GetCurrentDirectory( 256, printDir) )

return;

}

else

return;



// Loop through all files looking for

// the file name of interest.

fileHandle = FindFirstFile( fileMask,

&findData );

while ( fileHandle != INVALID_HANDLE_VALUE )

{

PrintFindData(stream, &findData, printDir );
PrintFindData2(stream2, &findData, printDir );


// loop thru remaining entries in the dir

if (!FindNextFile( fileHandle, &findData ))

break;

}

FindClose( fileHandle );



// Loop through all files in the directory

// looking for other directories

fileHandle = FindFirstFile( "*.*",

&findData );

while ( fileHandle != INVALID_HANDLE_VALUE )

{

// If the name is a directory,

// recursively walk it.

if( findData.dwFileAttributes &

FILE_ATTRIBUTE_DIRECTORY )

{

ListDirectoryContents(stream, stream2, findData.cFileName, fileMask );

}

// loop thru remaining entries in the dir

if (!FindNextFile( fileHandle, &findData ))

break;

}



// clean up and restore directory

FindClose( fileHandle );

SetCurrentDirectory( curDir );

}



int main(int argc, char *argv[])
{
char *curDir, *findName, *output, *csv;
FILE *stream, *stream2;
if (argc!=5)
{
printf("\nusage : %s <starting directory> <filemask> <output.txt> <output.csv>\n\n",VERSION);
printf("vacuum@technotronic.com\n");
exit(0);
}
curDir = argv[1];
findName = argv[2];
output = argv[3];
csv = argv[4];

if( (stream = fopen(output, "w" )) == NULL )
printf( "The file '%s' was not opened\n",output), exit(-1);

if( (stream2 = fopen(csv, "w" )) == NULL )
printf( "The file '%s' was not opened\n",csv), exit(-1);

// CVS Headings
fprintf(stream2, "Filename:, Size:, Creation Time:, Last Access Time:, Last Write Time:, ");
fprintf(stream2, "Company Name:, File Description:, File Version:, Internal Name:, Legal Copyright:, ");
fprintf(stream2, "Original File Name:, Product Name:, Product Version:, Comments:, Legal Trademark:, ");
fprintf(stream2, "Original File Name:, Product Name:, Product Version:, Comments:, Legal Trademarks:, ");
fprintf(stream2, "Private Build:, Special Build:\n");

if (!SetCurrentDirectory(curDir))
{
printf("Couldn't get the starting directory.\n");
return(-1);
}
else
{
ListDirectoryContents(stream, stream2, curDir, findName);

}
fclose(stream);
fclose(stream2);
return(0);}

Login or Register to add favorites

File Archive:

April 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Apr 1st
    10 Files
  • 2
    Apr 2nd
    26 Files
  • 3
    Apr 3rd
    40 Files
  • 4
    Apr 4th
    6 Files
  • 5
    Apr 5th
    26 Files
  • 6
    Apr 6th
    0 Files
  • 7
    Apr 7th
    0 Files
  • 8
    Apr 8th
    22 Files
  • 9
    Apr 9th
    14 Files
  • 10
    Apr 10th
    10 Files
  • 11
    Apr 11th
    13 Files
  • 12
    Apr 12th
    14 Files
  • 13
    Apr 13th
    0 Files
  • 14
    Apr 14th
    0 Files
  • 15
    Apr 15th
    30 Files
  • 16
    Apr 16th
    10 Files
  • 17
    Apr 17th
    22 Files
  • 18
    Apr 18th
    45 Files
  • 19
    Apr 19th
    8 Files
  • 20
    Apr 20th
    0 Files
  • 21
    Apr 21st
    0 Files
  • 22
    Apr 22nd
    11 Files
  • 23
    Apr 23rd
    68 Files
  • 24
    Apr 24th
    23 Files
  • 25
    Apr 25th
    0 Files
  • 26
    Apr 26th
    0 Files
  • 27
    Apr 27th
    0 Files
  • 28
    Apr 28th
    0 Files
  • 29
    Apr 29th
    0 Files
  • 30
    Apr 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2022 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close