Tham khảo tài liệu 'cracker handbook part 28', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả | lại WAIT_IO_COMPLETION. Nếu function hoàn thành và quá trình đọc file hoàn thành nhưng lệnh gọi thread không có trong alertable wait state hệ thống queue lệnh call completion thông thường típ tục lệnh call cho đến khi lệnh gọi thread gia nhập alertable wait state. Để biết thông tin về alertable wait và overlapped input output các bác hãy đọc Synchronization and Overlapped Input and Output. Nếu hàm ReadFileEx cố gắng đọc qua đoạn cuối của file giá trị trả về là FALSE và GetLastError trở về ERROR_HANDLE_EOF. SetFilePointer Hàm SetFilePointer có nhiệm vụ di chuyển pointer của open file Code DWORD SetFilePointer HANDLE hFile handle of file LONG lDistanceToMove number of bytes to move file pointer PLONG lpDistanceToMoveHigh address of high-order word of dist. to move DWORD dwMoveMethod how to move Returns Nếu function hoàn thành giá trị trả về là low-order doubleword của new file pointer và nếu IpDistanceToMoveHigh không phải là NULL function đặt highorder doubleword của new file pointer vào trong LONG pointer bằng các thông số đó WriteFile Hàm WriteFile có nhiệm vụ viết dữ liệu vào file và được design cho cả 2 quá trình đồng bộ và không đồng bộ. Hàm này bắt đầu viết dữ liệu vào file tại vị trí được cho biết bởi file pointer. Sau khi viết xong file pointer sửa lại cho đúng bằng số byte đã được viết trừ khi file được mở với FILE_FLAG_OVERLAPPED. . Nếu file handle được tạo để overlapped input cho vào và output lấy ra I O sau khi viết xong application phải chỉnh lại cho đúng vị trí của file pointer. Code BOOL WriteFile HANDLE hFile LPCVOID lpBuffer DWORD nNumberOfBytesToWrite LPDWORD lpNumberOfBytesWritten written handle of file to write to address of data to write to file number of bytes to write address of number of bytes LPOVERLAPPED IpOverlapped overlapped I O addr. of structure needed for Returns Nếu function hoàn thành giá trị trả về là TRUE. Nếu function không hoàn thành giá trị trả về là FALSE. Để có thêm thông tin về lỗi chúng ta dùng hàm GetLastError. WriteFileEx