Changeset 3588 for trunk/src


Ignore:
Timestamp:
May 22, 2000, 9:08:01 PM (25 years ago)
Author:
sandervl
Message:

GetFileTime bugfix + FindResource(Ex)A/W changes + setup thread security objects during creation

Location:
trunk/src/kernel32
Files:
13 edited

Legend:

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

    r3508 r3588  
    1 /* $Id: Fileio.cpp,v 1.32 2000-05-09 19:27:44 sandervl Exp $ */
     1/* $Id: Fileio.cpp,v 1.33 2000-05-22 19:07:53 sandervl Exp $ */
    22
    33/*
     
    241241//******************************************************************************
    242242//******************************************************************************
     243ODINFUNCTION4(BOOL, GetFileTime, HANDLE, hFile, LPFILETIME, arg2, LPFILETIME, arg3, LPFILETIME, arg4)
     244{
     245    return HMGetFileTime(hFile, arg2, arg3, arg4);
     246}
     247//******************************************************************************
     248//******************************************************************************
    243249ODINFUNCTION3(BOOL, CopyFileA,
    244250              LPCSTR, arg1,
     
    280286              LPCSTR, lpszFile)
    281287{
    282   dprintf(("DeleteFileA %s", lpszFile));
    283   return O32_DeleteFile(lpszFile);
    284 //  return TRUE;
     288 BOOL rc;
     289
     290  rc = O32_DeleteFile(lpszFile);
     291  if(!rc) {
     292        dprintf(("DeleteFileA %s returned FALSE; last error %x", lpszFile, GetLastError()));
     293        if(GetLastError() == 20) {
     294                return TRUE;
     295        }
     296  }
     297  else  dprintf(("DeleteFileA %s", lpszFile));
     298
     299  return rc;
    285300}
    286301//******************************************************************************
     
    431446        }
    432447    }
     448    //SvL: Open32 returns FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_NORMAL for
     449    //     directories whereas NT 4 (SP6) only returns FILE_ATTRIBUTE_DIRECTORY
     450    if(rc != -1 && (rc & FILE_ATTRIBUTE_DIRECTORY)) {
     451        rc = FILE_ATTRIBUTE_DIRECTORY;
     452    }
    433453
    434454#if 0 // need more tests, maybe there is also a better way to hide simulated b:
  • trunk/src/kernel32/HandleManager.cpp

    r3234 r3588  
    1 /* $Id: HandleManager.cpp,v 1.38 2000-03-24 23:14:59 sandervl Exp $ */
     1/* $Id: HandleManager.cpp,v 1.39 2000-05-22 19:07:52 sandervl Exp $ */
    22
    33/*
     
    13461346}
    13471347
     1348/*****************************************************************************
     1349 * Name      : HMDeviceHandler::GetFileTime
     1350 * Purpose   : router function for SetFileTime
     1351 * Parameters:
     1352 * Variables :
     1353 * Result    :
     1354 * Remark    :
     1355 * Status    :
     1356 *
     1357 * Author    : SvL
     1358 *****************************************************************************/
     1359
     1360BOOL HMGetFileTime (HANDLE         hFile,
     1361                    const FILETIME *pFT1,
     1362                    const FILETIME *pFT2,
     1363                    const FILETIME *pFT3)
     1364{
     1365  int       iIndex;                           /* index into the handle table */
     1366  BOOL      bResult;                 /* result from the device handler's API */
     1367  PHMHANDLE pHMHandle;       /* pointer to the handle structure in the table */
     1368
     1369                                                          /* validate handle */
     1370  iIndex = _HMHandleQuery(hFile);                           /* get the index */
     1371  if (-1 == iIndex)                                               /* error ? */
     1372  {
     1373    SetLastError(ERROR_INVALID_HANDLE);       /* set win32 error information */
     1374    return FALSE;                         /* signal failure */
     1375  }
     1376
     1377  pHMHandle = &TabWin32Handles[iIndex];               /* call device handler */
     1378  bResult = pHMHandle->pDeviceHandler->GetFileTime(&pHMHandle->hmHandleData,
     1379                                                   (LPFILETIME)pFT1,
     1380                                                   (LPFILETIME)pFT2,
     1381                                                   (LPFILETIME)pFT3);
     1382
     1383  return (bResult);                                   /* deliver return code */
     1384}
     1385
    13481386
    13491387/*****************************************************************************
  • trunk/src/kernel32/hmdevice.cpp

    r3140 r3588  
    1 /* $Id: hmdevice.cpp,v 1.18 2000-03-17 16:08:39 sandervl Exp $ */
     1/* $Id: hmdevice.cpp,v 1.19 2000-05-22 19:07:54 sandervl Exp $ */
    22
    33/*
     
    350350           pFT3));
    351351
     352  return(ERROR_INVALID_FUNCTION);
     353}
     354
     355/*****************************************************************************
     356 * Name      : BOOL HMDeviceHandler::GetFileTime
     357 * Purpose   : get file time
     358 * Parameters: PHMHANDLEDATA pHMHandleData
     359 *             PFILETIME     pFT1
     360 *             PFILETIME     pFT2
     361 *             PFILETIME     pFT3
     362 * Variables :
     363 * Result    : API returncode
     364 * Remark    :
     365 * Status    :
     366 *
     367 * Author    : SvL
     368 *****************************************************************************/
     369
     370BOOL HMDeviceHandler::GetFileTime(PHMHANDLEDATA pHMHandleData,
     371                                      LPFILETIME pFT1,
     372                                      LPFILETIME pFT2,
     373                                      LPFILETIME pFT3)
     374{
     375  DebugInt3();
    352376  return(ERROR_INVALID_FUNCTION);
    353377}
  • trunk/src/kernel32/hmdevice.h

    r3140 r3588  
    1 /* $Id: hmdevice.h,v 1.17 2000-03-17 16:08:39 sandervl Exp $ */
     1/* $Id: hmdevice.h,v 1.18 2000-05-22 19:07:55 sandervl Exp $ */
    22
    33/*
     
    132132                      /* this is a handler method for calls to SetFileTime() */
    133133  virtual BOOL  SetFileTime (PHMHANDLEDATA pHMHandleData,
     134                             LPFILETIME    pFT1,
     135                             LPFILETIME    pFT2,
     136                             LPFILETIME    pFT3);
     137
     138                      /* this is a handler method for calls to GetFileTime() */
     139  virtual BOOL  GetFileTime (PHMHANDLEDATA pHMHandleData,
    134140                             LPFILETIME    pFT1,
    135141                             LPFILETIME    pFT2,
  • trunk/src/kernel32/hmopen32.cpp

    r3501 r3588  
    1 /* $Id: hmopen32.cpp,v 1.21 2000-05-09 18:56:08 sandervl Exp $ */
     1/* $Id: hmopen32.cpp,v 1.22 2000-05-22 19:07:56 sandervl Exp $ */
    22
    33/*
     
    185185  if (hFile != INVALID_HANDLE_ERROR)
    186186  {
    187      pHMHandleData->hHMHandle = hFile;
    188      return (NO_ERROR);
    189   }
    190   else
    191     return(O32_GetLastError());
     187        pHMHandleData->hHMHandle = hFile;
     188        return (NO_ERROR);
     189  }
     190  else {
     191        dprintf(("CreateFile failed; error %x", O32_GetLastError()));
     192        return(O32_GetLastError());
     193  }
    192194#else
    193195
     
    516518}
    517519
     520/*****************************************************************************
     521 * Name      : BOOL HMDeviceOpen32Class::GetFileTime
     522 * Purpose   : get file time
     523 * Parameters: PHMHANDLEDATA pHMHandleData
     524 *             PFILETIME     pFT1
     525 *             PFILETIME     pFT2
     526 *             PFILETIME     pFT3
     527 * Variables :
     528 * Result    : API returncode
     529 * Remark    :
     530 * Status    :
     531 *
     532 * Author    : SvL
     533 *****************************************************************************/
     534
     535BOOL HMDeviceOpen32Class::GetFileTime(PHMHANDLEDATA pHMHandleData,
     536                                      LPFILETIME pFT1,
     537                                      LPFILETIME pFT2,
     538                                      LPFILETIME pFT3)
     539{
     540  return O32_GetFileTime(pHMHandleData->hHMHandle,
     541                         pFT1,
     542                         pFT2,
     543                         pFT3);
     544}
     545
    518546
    519547/*****************************************************************************
     
    758786    pHMHandleData->hHMHandle = hFile;
    759787
    760     GetFileTime(hFile,
    761                 NULL,
    762                 NULL,
    763                 &filetime );
     788    ::GetFileTime(hFile,
     789                  NULL,
     790                  NULL,
     791                  &filetime );
    764792    FileTimeToDosDateTime(&filetime,
    765793                          &filedatetime[0],
  • trunk/src/kernel32/hmopen32.h

    r2050 r3588  
    1 /* $Id: hmopen32.h,v 1.4 1999-12-09 19:08:29 sandervl Exp $ */
     1/* $Id: hmopen32.h,v 1.5 2000-05-22 19:07:56 sandervl Exp $ */
    22
    33/*
     
    9595                             LPFILETIME    pFT3);
    9696
     97                      /* this is a handler method for calls to GetFileTime() */
     98  virtual BOOL  GetFileTime (PHMHANDLEDATA pHMHandleData,
     99                             LPFILETIME    pFT1,
     100                             LPFILETIME    pFT2,
     101                             LPFILETIME    pFT3);
     102
    97103                      /* this is a handler method for calls to GetFileSize() */
    98104  virtual DWORD GetFileSize(PHMHANDLEDATA pHMHandleData,
  • trunk/src/kernel32/lang.cpp

    r3501 r3588  
    1 /* $Id: lang.cpp,v 1.19 2000-05-09 18:56:09 sandervl Exp $ */
     1/* $Id: lang.cpp,v 1.20 2000-05-22 19:07:57 sandervl Exp $ */
    22/*
    33 * Win32 language API functions for OS/2
     
    141141{
    142142  dprintf(("KERNEL32:  OS2GetUserDefaultLCID: returns %x", MAKELCID(GetLanguageId(), SORT_DEFAULT)));
    143   return(MAKELCID(GetLanguageId(), SORT_DEFAULT));        //US English
     143  return(MAKELCID(GetLanguageId(), SORT_DEFAULT));
    144144}
    145145//******************************************************************************
  • trunk/src/kernel32/oslibdos.cpp

    r3360 r3588  
    1 /* $Id: oslibdos.cpp,v 1.26 2000-04-09 15:08:25 sandervl Exp $ */
     1/* $Id: oslibdos.cpp,v 1.27 2000-05-22 19:07:58 sandervl Exp $ */
    22/*
    33 * Wrappers for OS/2 Dos* API
     
    420420//******************************************************************************
    421421//******************************************************************************
     422DWORD OSLibDosDelete(char *lpszFileName)
     423{
     424  return DosDelete(lpszFileName);
     425}
     426//******************************************************************************
     427//******************************************************************************
    422428BOOL pmDateTimeToFileTime(FDATE *pDate,FTIME *pTime,FILETIME *pFT)
    423429{
  • trunk/src/kernel32/oslibdos.h

    r3269 r3588  
    1 /* $Id: oslibdos.h,v 1.13 2000-03-29 15:17:29 cbratschi Exp $ */
     1/* $Id: oslibdos.h,v 1.14 2000-05-22 19:07:59 sandervl Exp $ */
    22
    33/*
     
    7171DWORD OSLibDosRead(DWORD hFile, LPVOID lpBuffer, DWORD size, DWORD *nrBytesRead);
    7272DWORD OSLibDosWrite(DWORD hFile, LPVOID lpBuffer, DWORD size, DWORD *nrBytesWritten);
     73DWORD OSLibDosDelete(char *lpszFileName);
    7374
    7475#define OSLIB_SETPTR_FILE_CURRENT       1
  • trunk/src/kernel32/time.cpp

    r2802 r3588  
    1 /* $Id: time.cpp,v 1.7 2000-02-16 14:23:12 sandervl Exp $ */
     1/* $Id: time.cpp,v 1.8 2000-05-22 19:07:59 sandervl Exp $ */
    22
    33/*
     
    114114    dprintf(("KERNEL32:  DosDateTimeToFileTime\n"));
    115115    return O32_DosDateTimeToFileTime(arg1, arg2, arg3);
    116 }
    117 //******************************************************************************
    118 //******************************************************************************
    119 BOOL WIN32API GetFileTime( HANDLE arg1, LPFILETIME arg2, LPFILETIME arg3, LPFILETIME  arg4)
    120 {
    121     dprintf(("KERNEL32:  GetFileTime\n"));
    122     return O32_GetFileTime(arg1, arg2, arg3, arg4);
    123116}
    124117//******************************************************************************
  • trunk/src/kernel32/winimagebase.h

    r3483 r3588  
    1 /* $Id: winimagebase.h,v 1.7 2000-05-02 20:53:14 sandervl Exp $ */
     1/* $Id: winimagebase.h,v 1.8 2000-05-22 19:08:00 sandervl Exp $ */
    22
    33/*
     
    136136        ULONG getPEResourceSize(ULONG id, ULONG type, ULONG lang = LANG_GETFIRST);
    137137
    138         PIMAGE_RESOURCE_DATA_ENTRY getPEResourceEntry(ULONG id, ULONG type, ULONG lang = LANG_GETFIRST);
     138        PIMAGE_RESOURCE_DATA_ENTRY getPEResourceEntry(ULONG id, ULONG type, ULONG lang, int *error);
    139139        PIMAGE_RESOURCE_DATA_ENTRY ProcessResSubDir(PIMAGE_RESOURCE_DIRECTORY prdType,
    140                                                     ULONG *nodeData, int level);
     140                                                    ULONG *nodeData, int level, int *error);
    141141        PIMAGE_RESOURCE_DIRECTORY  getResSubDirW(PIMAGE_RESOURCE_DIRECTORY pResDir, LPCWSTR lpszName);
    142142        PIMAGE_RESOURCE_DIRECTORY  getResSubDirA(PIMAGE_RESOURCE_DIRECTORY pResDir, LPCTSTR lpszName);
  • trunk/src/kernel32/winimgres.cpp

    r3547 r3588  
    1 /* $Id: winimgres.cpp,v 1.36 2000-05-18 09:08:38 sandervl Exp $ */
     1/* $Id: winimgres.cpp,v 1.37 2000-05-22 19:08:00 sandervl Exp $ */
    22
    33/*
     
    3535#define BITMAP_TYPENAME2    "DIB"
    3636
     37#define RESERR_SUCCESS          0
     38#define RESERR_IDNOTFOUND       1
     39#define RESERR_TYPENOTFOUND     2
     40#define RESERR_LANGNOTFOUND     3
     41
    3742//******************************************************************************
    3843//Assuming names are case insensitive
     
    4045//******************************************************************************
    4146PIMAGE_RESOURCE_DATA_ENTRY
    42  Win32ImageBase::getPEResourceEntry(ULONG id, ULONG type, ULONG lang)
     47 Win32ImageBase::getPEResourceEntry(ULONG id, ULONG type, ULONG lang, int *error)
    4348{
    4449 PIMAGE_RESOURCE_DIRECTORY       prdType;
     
    4853 ULONG  nodeData[3], i, j, nameOffset;
    4954 BOOL  fFound = FALSE, fNumType;
     55
     56  *error = RESERR_TYPENOTFOUND;
    5057
    5158  //PH: our system LX DLLs might not have a resource segment
     
    120127    if(fFound) {
    121128        if((ULONG)prdType & 0x80000000) {//subdirectory?
    122             pData = ProcessResSubDir(prdType, &nodeData[0], 2);
     129            pData = ProcessResSubDir(prdType, &nodeData[0], 2, error);
    123130        }
    124131        else {
     
    131138    prde++;
    132139  }
     140  if(pData) {
     141        *error = RESERR_SUCCESS; //found it
     142  }
    133143  return pData;
    134144}
     
    139149PIMAGE_RESOURCE_DATA_ENTRY
    140150    Win32ImageBase::ProcessResSubDir(PIMAGE_RESOURCE_DIRECTORY prdType,
    141                                      ULONG *nodeData, int level)
     151                                     ULONG *nodeData, int level, int *error)
    142152{
    143153 PIMAGE_RESOURCE_DIRECTORY       prdType2;
     
    158168  prde    = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)((DWORD)prdType + sizeof(IMAGE_RESOURCE_DIRECTORY));
    159169
     170  if(level == 2) {
     171        *error = RESERR_IDNOTFOUND;
     172  }
     173  else {
     174        *error = RESERR_LANGNOTFOUND;
     175  }
    160176  //level 2 (id)   -> get first id?
    161177  //level 3 (lang) -> get first language?
     
    204220        if(fFound) {
    205221            if((ULONG)prdType2 & 0x80000000) {//subdirectory?
    206                     return ProcessResSubDir(prdType2, nodeData+1, 3);
     222                    return ProcessResSubDir(prdType2, nodeData+1, 3, error);
    207223            }
    208224            else {
     
    222238ULONG Win32ImageBase::getPEResourceSize(ULONG id, ULONG type, ULONG lang)
    223239{
    224  PIMAGE_RESOURCE_DATA_ENTRY      pData = NULL;
     240 PIMAGE_RESOURCE_DATA_ENTRY pData = NULL;
     241 int                        error;
    225242
    226243    switch(lang) {
     
    237254    }
    238255
    239     pData = getPEResourceEntry(id, type, lang);
     256    pData = getPEResourceEntry(id, type, lang, &error);
    240257    if(pData == NULL) {
    241258        dprintf(("Win32ImageBase::getPEResourceSize: couldn't find resource %d (type %d, lang %x)", id, type, lang));
     
    246263//******************************************************************************
    247264//******************************************************************************
    248 HRSRC Win32ImageBase::findResourceA(LPCSTR lpszName, LPSTR lpszType, ULONG lang)
     265HRSRC Win32ImageBase::findResourceA(LPCSTR lpszName, LPSTR lpszType, ULONG langid)
    249266{
    250267 PIMAGE_RESOURCE_DATA_ENTRY      pData = NULL;
     
    252269 BOOL   fNumType;
    253270 char  *winres = NULL;
    254  ULONG  id, type;
    255  int    i, j;
     271 ULONG  id, type, lang;
     272 int    i, j, error;
    256273
    257274    fNumType = TRUE;    //assume numeric
     
    275292    else  type = (ULONG)lpszType;
    276293
    277     switch(lang) {
     294    switch(langid) {
    278295    case LOCALE_SYSTEM_DEFAULT:
    279296        lang = GetSystemDefaultLangID();
     
    285302        //TODO: Not correct; should take language associated with current thread
    286303        lang = IDLANG_GETFIRST;
    287         break;   
     304        break;
     305    case IDLANG_GETFIRST:
     306        lang = GetUserDefaultLangID();
     307        break;   
    288308    }
    289309    id = (ULONG)lpszName;
    290310
    291     pData = getPEResourceEntry(id, type, lang);
     311    pData = getPEResourceEntry(id, type, lang, &error);
    292312    if(pData == NULL) {
    293         if(HIWORD(id)) {
    294                 dprintf(("Win32ImageBase::getPEResource %s: couldn't find resource %s (type %d, lang %x)", szModule, id, type, lang));
    295         }
    296         else    dprintf(("Win32ImageBase::getPEResource %s: couldn't find resource %d (type %d, lang %x)", szModule, id, type, lang));
    297         return 0;
     313        //TODO: Optimize this; check if language wasn't found
     314        //try system default language
     315        if(error == RESERR_LANGNOTFOUND) {
     316                pData = getPEResourceEntry(id, type, GetSystemDefaultLangID(), &error);
     317        }
     318        if(pData == NULL) {
     319                //finally try first available language
     320                if(error == RESERR_LANGNOTFOUND) {
     321                        pData = getPEResourceEntry(id, type, IDLANG_GETFIRST, &error);
     322                }
     323                if(pData == NULL) {
     324                        if(HIWORD(id)) {
     325                                dprintf(("Win32ImageBase::getPEResource %s: couldn't find resource %s (type %d, lang %x)", szModule, id, type, lang));
     326                        }
     327                        else    dprintf(("Win32ImageBase::getPEResource %s: couldn't find resource %d (type %d, lang %x)", szModule, id, type, lang));
     328                        return 0;
     329                }
     330        }
    298331    }
    299332    if(HIWORD(id)) {
     
    374407{
    375408 PIMAGE_RESOURCE_DATA_ENTRY      pData = NULL;
     409 int                             error;
    376410
    377411    if(verstruct == NULL || bufLength == 0) {
     
    379413        return FALSE;
    380414    }
    381     pData = getPEResourceEntry(ID_GETFIRST, NTRT_VERSION);
     415    pData = getPEResourceEntry(ID_GETFIRST, NTRT_VERSION, IDLANG_GETFIRST, &error);
    382416    if(pData == NULL) {
    383417        dprintf(("Win32PeLdrImage::getVersionStruct: couldn't find version resource!"));
  • trunk/src/kernel32/wprocess.cpp

    r3483 r3588  
    1 /* $Id: wprocess.cpp,v 1.80 2000-05-02 20:53:15 sandervl Exp $ */
     1/* $Id: wprocess.cpp,v 1.81 2000-05-22 19:08:01 sandervl Exp $ */
    22
    33/*
     
    6262static THDB     *threadList = 0;
    6363static VMutex    threadListMutex;
     64
     65//TODO: This should not be here: (need to rearrange NTDLL; kernel32 can't depend on ntdll)
     66BOOLEAN (* WINAPI RtlAllocateAndInitializeSid) ( PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
     67                                                 BYTE nSubAuthorityCount,
     68                                                 DWORD nSubAuthority0,
     69                                                 DWORD nSubAuthority1,
     70                                                 DWORD nSubAuthority2,
     71                                                 DWORD nSubAuthority3,
     72                                                 DWORD nSubAuthority4,
     73                                                 DWORD nSubAuthority5,
     74                                                 DWORD nSubAuthority6,
     75                                                 DWORD nSubAuthority7,
     76                                                 PSID *pSid);
     77static HINSTANCE hInstNTDll = 0;
    6478//******************************************************************************
    6579//******************************************************************************
     
    202216    }
    203217    else thdb->flags      = 0;  //todo textmode
     218
     219    //Initialize thread security objects (TODO: Not complete)
     220    if(hInstNTDll == 0) {
     221        hInstNTDll = LoadLibraryA("NTDLL.DLL");
     222        *(ULONG *)&RtlAllocateAndInitializeSid = (ULONG)GetProcAddress(hInstNTDll, "RtlAllocateAndInitializeSid");
     223        if(RtlAllocateAndInitializeSid == NULL) {
     224                DebugInt3();
     225        }
     226    }
     227    SID_IDENTIFIER_AUTHORITY sidIdAuth = {0};
     228    thdb->threadinfo.dwType = SECTYPE_PROCESS | SECTYPE_INITIALIZED;
     229    RtlAllocateAndInitializeSid(&sidIdAuth, 1, 0, 0, 0, 0, 0, 0, 0, 0, &thdb->threadinfo.SidUser.User.Sid);
     230    thdb->threadinfo.SidUser.User.Attributes = 0; //?????????
     231 
     232    thdb->threadinfo.pTokenGroups = (TOKEN_GROUPS*)malloc(sizeof(TOKEN_GROUPS));
     233    thdb->threadinfo.pTokenGroups->GroupCount = 1;
     234    RtlAllocateAndInitializeSid(&sidIdAuth, 1, 0, 0, 0, 0, 0, 0, 0, 0, &thdb->threadinfo.PrimaryGroup.PrimaryGroup);
     235    thdb->threadinfo.pTokenGroups->Groups[0].Sid = thdb->threadinfo.PrimaryGroup.PrimaryGroup;
     236    thdb->threadinfo.pTokenGroups->Groups[0].Attributes = 0; //????
     237//        pPrivilegeSet   = NULL;
     238//        pTokenPrivileges= NULL;
     239//        TokenOwner      = {0};
     240//        DefaultDACL     = {0};
     241//        TokenSource     = {0};
     242    thdb->threadinfo.TokenType = TokenPrimary;
    204243
    205244    if(fMainThread)
Note: See TracChangeset for help on using the changeset viewer.