typedef struct _FILETIME { 
 DWORD dwLowDateTime;
  DWORD dwHighDateTime;
} FILETIME, *PFILETIME;__int64 FileTimeToQuadWord(PFILETIME pft) 
{
   return (Int64ShllMod32(
      pft->dwHighDateTime, 32) | pft->dwLowDateTime);
}
注:
Int64ShllMod32The Int64ShllMod32 function performs a left logical shift operation on an unsigned 64-bit integer value. The function provides improved shifting code for left logical shifts where the shift count is in the range 0 – 31.
ULONGLONG Int64ShllMod32(
  ULONGLONG Value,
  DWORD ShiftCount
);Parameters
Value 
[in] Unsigned 64-bit integer to be shifted. 
ShiftCount 
[in] Shift count in the range 0 – 31. 
我的问题:Int64ShllMod32要求64位数据,可pft->dwHighDateTime是DWORD型,搞不懂了....

解决方案 »

  1.   

    __inline ULONGLONG
    NTAPI
    Int64ShllMod32 (
        ULONGLONG Value,
        DWORD ShiftCount
        )
    {
        __asm    {
            mov     ecx, ShiftCount
            mov     eax, dword ptr [Value]
            mov     edx, dword ptr [Value+4]
            shld    edx, eax, cl
            shl     eax, cl
        }
    }
    实现如下,调用的时候 扩展了位数
      

  2.   

    Int64ShllMod32要求64位数据,可pft->dwHighDateTime是DWORD型,搞不懂了Int64ShllMod32(pft->dwHighDateTime, 32) ,这个过程发生了一个转换!
    pft->dwHighDateTime被转换为(提升)一个ULONGLONG类型的值(看看c++函数参数匹配)下边这句是
    Int64ShllMod32(pft->dwHighDateTime, 32) | pft->dwLowDateTime
    Int64ShllMod32函数将这个pft->dwHighDateTime参数右移32位,返回64位,低32位为零,然后和
    pft->dwLowDateTime求与
      

  3.   

    Win 32中有很多函数需要32位数做参数,你有没有试过传入一个16位甚至8位的数呢?
    比如:参数类型DWORD,你传入一个WORD或者BYTE,会怎么样呢?
    其实道理一样的。