internal unsafe static long SetFilePointer(SafeFileHandle handle, long offset, System.IO.SeekOrigin origin, out int hr) {
hr = 0;
int lo = (int) offset;
int hi = (int) (offset >> 32);
lo = SetFilePointerWin32(handle, lo, &hi, (int) origin);
if (lo == -1 && ((hr = Marshal.GetLastWin32Error()) != 0))
return -1;
return (long) (((ulong) ((uint) hi)) << 32) | ((uint) lo);
}