Changeset 22025 for trunk/src


Ignore:
Timestamp:
Sep 28, 2012, 6:56:57 PM (13 years ago)
Author:
dmik
Message:

kernel32: Implement GetFileInformationByHandle for directories.

Location:
trunk/src/kernel32
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/hmfile.cpp

    r22024 r22025  
    12071207  }
    12081208
    1209   pHMHandleData->dwUserData = (DWORD) new HMFileInfo(0, (LPSTR)lpFileName, lpSecurityAttributes);
    1210   pHMHandleData->hHMHandle  = 0x8000000;
     1209  pHMHandleData->dwUserData = (DWORD) new HMFileInfo(INVALID_HANDLE_VALUE,
     1210                                                     (LPSTR)lpFileName, lpSecurityAttributes);
     1211  pHMHandleData->hHMHandle  = 0x80000000; // make sure _HMHandleQuery won't fail
    12111212  return (NO_ERROR);
    12121213
     
    13291330  return finddata.nFileSizeLow;
    13301331}
     1332/*****************************************************************************
     1333 * Name      : BOOL HMDeviceFileInfoClass::GetFileInformationByHandle
     1334 * Purpose   : determine the handle type
     1335 * Parameters: PHMHANDLEDATA               pHMHandleData
     1336 *             BY_HANDLE_FILE_INFORMATION* pHFI
     1337 * Variables :
     1338 * Result    : API returncode
     1339 * Remark    :
     1340 * Status    :
     1341 *****************************************************************************/
     1342
     1343BOOL HMDeviceInfoFileClass::GetFileInformationByHandle(PHMHANDLEDATA               pHMHandleData,
     1344                                                       BY_HANDLE_FILE_INFORMATION* pHFI)
     1345{
     1346    dprintfl(("KERNEL32: HMDeviceInfoFileClass::GetFileInformationByHandle %s(%08xh,%08xh)\n",
     1347              lpHMDeviceName, pHMHandleData, pHFI));
     1348
     1349    HMFileInfo *fileInfo = (HMFileInfo *)pHMHandleData->dwUserData;
     1350    dprintf(("*** %s", fileInfo->lpszFileName));
     1351    if(OSLibDosGetFileInformationByHandle(fileInfo->lpszFileName,
     1352                                          INVALID_HANDLE_VALUE,
     1353                                          pHFI))
     1354    {
     1355        return TRUE;
     1356    }
     1357    dprintf(("GetFileInformationByHandle failed with error %d", GetLastError()));
     1358    return FALSE;
     1359}
    13311360/******************************************************************************
    13321361 * Name      : DWORD HMDeviceFileClass::GetFileNameFromHandle
     
    13931422  //an LX header. We need to skip that to present the original file to the
    13941423  //caller
    1395   if(hFile && !stricmp(lpszFileName + strlen(lpszFileName) - 4, ".EXE"))
     1424  if((hFile != INVALID_HANDLE_VALUE) && !stricmp(lpszFileName + strlen(lpszFileName) - 4, ".EXE"))
    13961425  {
    13971426      ULONG action, ulRead, signature, ulFileSize;
  • trunk/src/kernel32/hmfile.h

    r22024 r22025  
    8080  virtual DWORD GetFileType (PHMHANDLEDATA pHMHandleData);
    8181
    82        /* this is a handler method for calls to GetFileInformationByHandle() */
     82  /* this is a handler method for calls to GetFileInformationByHandle() */
    8383  virtual BOOL GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
    8484                                          BY_HANDLE_FILE_INFORMATION* pHFI);
     
    178178  virtual DWORD GetFileType (PHMHANDLEDATA pHMHandleData);
    179179
     180  /* this is a handler method for calls to GetFileInformationByHandle() */
     181  virtual BOOL GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
     182                                          BY_HANDLE_FILE_INFORMATION* pHFI);
     183
    180184  virtual BOOL GetFileNameFromHandle(PHMHANDLEDATA pHMHandleData, LPSTR lpszFileName, DWORD cbFileName);
    181185
  • trunk/src/kernel32/oslibdos.cpp

    r21925 r22025  
    14281428   APIRET      rc;
    14291429
     1430   if (lpFileName == NULL && hFile == INVALID_HANDLE_VALUE_W)
     1431   {
     1432       SetLastError(ERROR_INVALID_PARAMETER_W);
     1433       return FALSE;
     1434   }
     1435
    14301436   // NOTE: On HPFS386, doing FIL_QUERYEASIZE on a write-only file will
    14311437   // fail with ERROR_ACCESS_DENIED. Since we don't actually care about EAs
     
    14361442        FILESTATUS3L statusL = { 0 };
    14371443
    1438         rc = DosQueryFileInfo(hFile, FIL_STANDARDL,
    1439                               &statusL, sizeof(statusL));
     1444        rc = hFile != INVALID_HANDLE_VALUE_W ?
     1445                    DosQueryFileInfo(hFile, FIL_STANDARDL,
     1446                                     &statusL, sizeof(statusL)) :
     1447                    DosQueryPathInfo(lpFileName, FIL_STANDARDL,
     1448                                     &statusL, sizeof(statusL));
    14401449        if(rc == NO_ERROR)
    14411450        {
     
    14761485        FILESTATUS3  status  = { 0 };
    14771486
    1478         rc = DosQueryFileInfo(hFile, FIL_STANDARD, &status,
    1479                               sizeof(status));
     1487        rc = hFile != INVALID_HANDLE_VALUE_W ?
     1488                    DosQueryFileInfo(hFile, FIL_STANDARD, &status,
     1489                                     sizeof(status)) :
     1490                    DosQueryPathInfo(lpFileName, FIL_STANDARD, &status,
     1491                                     sizeof(status));
    14801492        if(rc == NO_ERROR)
    14811493        {
Note: See TracChangeset for help on using the changeset viewer.