Re: Request for help; A dir cmd (C-001655)

new topic     » goto parent     » topic index » view thread      » older message » newer message
znorq2 said...

Hi,

I'm in urgent need for a directory command (Must be in Euphoria v3 / Win32Lib) that can list the following information;

- File/folder name - Owner - Accessed date

I'd like to have the output in an csv type file like this; name;owner;accessed

As it is quite urgent, I don't have the time to sit down and figure this out for my self, so I'd appreciate if any of you gentlemen/women could help me out here?

Thank you.

Kenneth / ZNorQ.

To get the file names from a directory ...

#define _WIN32_WINNT 0x0501 
 
#include <windows.h> 
#include <stdio.h> 
#include <strsafe.h> 
#include <malloc.h> 
 
#define BUFSIZE MAX_PATH 
 
int main(int argc, char *argv[]) 
{ 
   WIN32_FIND_DATA FindFileData; 
   HANDLE hFind = INVALID_HANDLE_VALUE; 
   DWORD dwError; 
   LPSTR DirSpec; 
   size_t length_of_arg; 
 
 
   DirSpec = (LPSTR) malloc (BUFSIZE); 
    
   // Check for command-line parameter; otherwise, print usage. 
   if(argc != 2) 
   { 
      printf("Usage: Test <dir>\n"); 
      return 2; 
   } 
 
   // Check that the input is not larger than allowed. 
   StringCbLength(argv[1], BUFSIZE, &length_of_arg); 
   if (length_of_arg > (BUFSIZE - 2)) 
   { 
      printf("Input directory is too large.\n"); 
      return 3; 
   } 
 
   printf ("Target directory is %s.\n", argv[1]); 
 
   // Prepare string for use with FindFile functions.  First,  
   // copy the string to a buffer, then append '\*' to the  
   // directory name. 
   StringCbCopyN (DirSpec, BUFSIZE, argv[1], length_of_arg+1); 
   StringCbCatN (DirSpec, BUFSIZE, "\\*", 3); 
 
   // Find the first file in the directory. 
   hFind = FindFirstFile(DirSpec, &FindFileData); 
 
   if (hFind == INVALID_HANDLE_VALUE)  
   { 
      printf ("Invalid file handle. Error is %u.\n", GetLastError()); 
      return (-1); 
   }  
   else  
   { 
      printf ("First file name is %s.\n", FindFileData.cFileName); 
       
						// List all the other files in the directory. 
      while (FindNextFile(hFind, &FindFileData) != 0)  
      { 
         printf ("Next file name is %s.\n", FindFileData.cFileName); 
      } 
     
      dwError = GetLastError(); 
      FindClose(hFind); 
      if (dwError != ERROR_NO_MORE_FILES)  
      { 
         printf ("FindNextFile error. Error is %u.\n", dwError); 
         return (-1); 
      } 
   } 
 
   free(DirSpec); 
   return (0); 
} 

To get the owner name and access date ...

#include <stdio.h> 
#include <windows.h> 
#include <tchar.h> 
#include "accctrl.h" 
#include "aclapi.h" 
 
int main(int argc, char **argv) 
{ 
DWORD dwRtnCode = 0; 
PSID pSidOwner; 
BOOL bRtnBool = TRUE; 
LPTSTR AcctName, DomainName; 
DWORD dwAcctName = 1, dwDomainName = 1; 
SID_NAME_USE eUse = SidTypeUnknown; 
HANDLE hFile; 
PSECURITY_DESCRIPTOR pSD; 
FILETIME   CreationTime; 
FILETIME   LastAccessTime; 
FILETIME   LastWriteTime; 
SYSTEMTIME AccessDT; 
 
// Get the handle of an existing file. 
hFile = CreateFile( 
                  FileName,  // TCHAR * 
                  GENERIC_READ, 
                  FILE_SHARE_READ, 
                  NULL, 
                  OPEN_EXISTING, 
                  FILE_ATTRIBUTE_NORMAL, 
                  NULL); 
 
// Check GetLastError for CreateFile error code. 
if (hFile == INVALID_HANDLE_VALUE) { 
          DWORD dwErrorCode = 0; 
 
          dwErrorCode = GetLastError(); 
          _tprintf(TEXT("CreateFile error = %d\n"), dwErrorCode); 
          return -1; 
} 
 
dwRtnCode = GetFileTime( 
                hFile, 
                &CreationTime, 
                &LastAccessTime, 
                &LastWriteTime 
             ); 
            FileTimeToSystemTime( 
                &LastAcessTime, 
                &AccesDT 
             ); 
char AccessDateString[100]; 
AccessDateString = sprintf("%04d/%02d/%02d %0d:%02d:%02d", 
                             AccessDT.wYear, 
                             AccessDT.wMonth, 
                             AccessDT.wDay, 
                             AccessDT.wHour; 
                             AccessDT.wMinute, 
                             AccessDT.wSecond 
                    ); 
 
// Allocate memory for the SID structure. 
pSidOwner = (PSID)GlobalAlloc( 
          GMEM_FIXED, 
          sizeof(PSID)); 
 
// Allocate memory for the security descriptor structure. 
pSD = (PSECURITY_DESCRIPTOR)GlobalAlloc( 
          GMEM_FIXED, 
          sizeof(PSECURITY_DESCRIPTOR)); 
 
// Get the owner SID of the file. 
dwRtnCode = GetSecurityInfo( 
                  hFile, 
                  SE_FILE_OBJECT, 
                  OWNER_SECURITY_INFORMATION, 
                  &pSidOwner, 
                  NULL, 
                  NULL, 
                  NULL, 
                  &pSD); 
 
// Check GetLastError for GetSecurityInfo error condition. 
if (dwRtnCode != ERROR_SUCCESS) { 
          DWORD dwErrorCode = 0; 
 
          dwErrorCode = GetLastError(); 
          _tprintf(TEXT("GetSecurityInfo error = %d\n"), dwErrorCode); 
          return -1; 
} 
 
// First call to LookupAccountSid to get the buffer sizes. 
bRtnBool = LookupAccountSid( 
                  NULL,           // local computer 
                  pSidOwner, 
                  AcctName, 
                  (LPDWORD)&dwAcctName, 
                  DomainName, 
                  (LPDWORD)&dwDomainName, 
                  &eUse); 
 
// Reallocate memory for the buffers. 
AcctName = (char *)GlobalAlloc( 
          GMEM_FIXED, 
          dwAcctName); 
 
// Check GetLastError for GlobalAlloc error condition. 
if (AcctName == NULL) { 
          DWORD dwErrorCode = 0; 
 
          dwErrorCode = GetLastError(); 
          _tprintf(TEXT("GlobalAlloc error = %d\n"), dwErrorCode); 
          return -1; 
} 
 
    DomainName = (char *)GlobalAlloc( 
           GMEM_FIXED, 
           dwDomainName); 
 
    // Check GetLastError for GlobalAlloc error condition. 
    if (DomainName == NULL) { 
          DWORD dwErrorCode = 0; 
 
          dwErrorCode = GetLastError(); 
          _tprintf(TEXT("GlobalAlloc error = %d\n"), dwErrorCode); 
          return -1; 
 
    } 
 
    // Second call to LookupAccountSid to get the account name. 
    bRtnBool = LookupAccountSid( 
          NULL,                   // name of local or remote computer 
          pSidOwner,              // security identifier 
          AcctName,               // account name buffer 
          (LPDWORD)&dwAcctName,   // size of account name buffer  
          DomainName,             // domain name 
          (LPDWORD)&dwDomainName, // size of domain name buffer 
          &eUse);                 // SID type 
 
    // Check GetLastError for LookupAccountSid error condition. 
    if (bRtnBool == FALSE) { 
          DWORD dwErrorCode = 0; 
 
          dwErrorCode = GetLastError(); 
 
          if (dwErrorCode == ERROR_NONE_MAPPED) 
              _tprintf(TEXT 
                  ("Account owner not found for specified SID.\n")); 
          else  
              _tprintf(TEXT("Error in LookupAccountSid.\n")); 
          return -1; 
 
    } else if (bRtnBool == TRUE)  
 
        // Print the account name. 
        _tprintf(TEXT("Account owner = %s\n"), AcctName); 
 
    return 0; 
} 

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu