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. Nếu hàm WriteFileEx hoàn thành , calling thread có quá trình I/O không đồng bộ trong khoảng thời gian : overlapped viết thao tác vào file. Khi quá trình I/O này kết thúc, và lệnh gọi thread bị khóa trong alertable wait state, hệ thống gọi hàm IpCompletionRoutine, và sự chờ đợi hoàn thành với đoạn code trở lại WAIT_IO_COMPLETION. Nếu function hoàn thành và quá trình viết dữ liệu vào file hoàn thành, nhưng lệnh call thread không nằm trong alertable wait state, hệ thống queue lệnh call *IpCompletion, típ tục lệ nh call cho đến khi lệnh gọi thread “gia nhập” alertable wait state. Đọc Synchronization để biết thêm thông tin về alertable wait state và quá trình overlapped input / output WritePrivateProfileStringA / WritePrivateProfileStringW Code: BOOL WritePrivateProfileString( LPCTSTR lpszSection, // address of section name LPCTSTR lpszKey, // address of key name LPCTSTR lpszString, // address of string to add LPCTSTR lpszFile // address of initialization filename ); Returns Nếu function copy string vào file khởi tạo thành công, giá trị trả về là TRUE. Nếu function không hoàn thành , hoặc nếu nó flush cached version của hầu hết file khởi tạo truy cập gần đây, giá trị trả về là FALSE. Để có thông tin về lỗi, chúng ta dùng hàm GetLastError. 03.5 Registry Accesses ============== RegCreateKeyA / RegCreateKeyW Hàm RegCreateKey có nhiệm vụ tạo specified key. Nếu key đã có trong registry, hàm này s ẽ mở nó. Hàm này tương thích với Windows 3.1. Đối với Win32 chúng ta nên sử dụng hàm RegCreateKeyEx. Code: LONG RegCreateKey( HKEY hKey, // handle of an open key LPCTSTR lpszSubKey, // address of name of subkey to open PHKEY phkResult // address of buffer for opened handle ); Returns Nếu function hoàn thành , giá trị trả về là ERROR_SUCCESS Nếu function không hoàn thành , giá trị trả về là 1 giá trị lỗi. RegCreateKeyExA / RegCreateKeyExW Hàm RegCreateKeyEx có nhiệm vụ tạo specified key. . Nếu key đã có trong registry, hàm này sẽ mở nó. Code: LONG RegCreateKeyEx( HKEY hKey, // handle of an open key LPCTSTR lpszSubKey, // address of subkey name DWORD dwReserved, // reserved LPTSTR lpszClass, // address of class string DWORD fdwOptions, // special options flag REGSAM samDesired, // desired security access LPSECURITY_ATTRIBUTES lpSecurityAttributes, // address of key security structure PHKEY phkResult, // address of buffer for opened handle LPDWORD lpdwDisposition // address of disposition value buffer ); Returns Nếu function hoàn thành , giá trị trả về là ERROR_SUCCESS Nếu function không hoàn thành , giá trị trả về là 1 giá trị lỗi. RegDeleteKeyA / RegDeleteKeyW Hàm RegDeleteKey có nhiệm vụ xóa key và tấ t cả các key khác nằm trong nó Code: LONG RegDeleteKey( HKEY hKey, // handle of open key LPCTSTR lpszSubKey // address of name of subkey to delete ); Returns Nếu function hoàn thành , giá trị trả về là ERROR_SUCCESS Nếu function không hoàn thành , giá trị trả về là 1 giá trị lỗi. RegDeleteValueA / RegDeleteValueW Hàm RegDeleteValue có nhiệm vụ di chuyển named value từ specified registry key Code: LONG RegDeleteValue( HKEY hKey, // handle of key LPTSTR lpszValue // address of value name ); Returns Nếu function hoàn thành , giá trị trả về là ERROR_SUCCESS Nếu function không hoàn thành , giá trị trả về là 1 giá trị lỗi. RegOpenKeyA / RegOpenKeyW Hàm RegOpenKey có nhiệm vụ mở specified key. Hàm này tương thích với Windows 3.1. Đối với Win32 chúng ta nên dùng hàm RegOpenKeyEx Code: LONG RegOpenKey( HKEY hKey, // handle of open key LPCTSTR lpszSubKey, // address of name of subkey to open PHKEY phkResult // address of handle of open key ); Returns Nếu function hoàn thành , giá trị trả về là ERROR_SUCCESS Nếu function không hoàn thành , giá trị trả về là 1 giá trị lỗi. RegOpenKeyExA / RegOpenKeyExW Hàm RegOpenKeyEx có nhiệm vụ mở specified key Code: LONG RegOpenKeyEx( HKEY hKey, // handle of open key LPCTSTR lpszSubKey, // address of name of subkey to open DWORD dwReserved, // reserved REGSAM samDesired, // security access mask PHKEY phkResult // address of handle of open key ); Returns Nếu function hoàn thành , giá trị trả về là ERROR_SUCCESS Nếu function không hoàn thành , giá trị trả về là 1 giá trị lỗi. RegQueryValueA / RegQueryValueW Hàm RegQueryValue có nhiệm vụ tìm giá trị kết hợp với giá trị không tên cho specified key trong registry. Những giá trị trong registry có tên, type (loại) và thành phần dữ liệu. Hàm này tìm dữ liệu cho giá trị đầu tiên của key có NULL name. Hàm này tương thích với Windows 3.1. Còn đối với Win32 thì chúng ta nên dùng hàm RegQueryValueEx. Code: LONG RegQueryValue( HKEY hKey, // handle of key to query LPCTSTR lpszSubKey, // address of name of subkey to query LPTSTR lpszValue, // address of buffer for ret string PLONG pcbValue // address of buffer for size of ret string ); Returns Nếu function hoàn thành , giá trị trả về là ERROR_SUCCESS Nếu function không hoàn thành , giá trị trả về là 1 giá trị lỗi. RegQueryValueExA / RegQueryValueExW Hàm RegQueryValueEx có nhiệm vụ tìm loại và dữ liệu cho giá trị có tên đã được xác định kết hợp với việc mở registry key. Code: LONG RegQueryValueEx( HKEY hKey, // handle of key to query LPTSTR lpszValueName, // address of name of value to query LPDWORD lpdwReserved, // reserved LPDWORD lpdwType, // address of buffer for value type LPBYTE lpbData, // address of data buffer LPDWORD lpcbData // address of data buffer size ); Returns Nếu function hoàn thành , giá trị trả về là ERROR_SUCCESS Nếu function không hoàn thành , giá trị trả về là 1 giá trị lỗi. 03.6 Serial Catching ============ GetDlgItemInt Hàm GetDlgItemInt có nhiệm vụ dịch text của specified control trong dialog box sang giá trị integer Code: UINT GetDlgItemInt( HWND hDlg, // handle to dialog box int nIDDlgItem, // control identifier BOOL* lpTranslated, // points to var to rec. suc/failr indicator BOOL bSigned // specifies whether value is un/-signed ); Returns Nếu function hoàn thành , biến số pointed to bởi IpTranslated được set TRUE, và giá trị trả về là giá trị đã dịch từ control text Nếu function không hoàn thành , biến số pointed to bởi IpTranslated được set FALSE, và giá trị trả về là 0. Nếu như 0 là giá trị translated thì giá trị trả về của 0 không tự indicate failure Nếu IpTranslated là NULL, function return không có thông tin về hoàn thành hay không hoàn thành . Nếu thông số bSigned là TRUE, ghi rõ giá trị được tìm thấy là giá trị integer signed, “quăng” giá trị trả về vào int type. GetDlgItemText / GetDlgItemTextA / GetDlgItemTextW Hàm GetDlgItemText có nhiệm vụ tìm title hoặc text kết hợp với control trong dialog box Code: UINT GetDlgItemText( HWND hDlg, // handle of dialog box int nIDDlgItem, // identifier of control LPTSTR lpString, // address of buffer for text int nMaxCount // maximum size of string ); Returns Nếu function hoàn thành , giá trị trả về ghi rõ số kí tự được copy vào buffer, không bao gồm kí tự null. Nếu function không hoàn thành , giá trị trả về là 0. GetWindowLong / GetWindowLongA / GetWindowLongW Hàm GetWindowLong có nhiệm vụ tìm thông tin về specified window. Hàm này còn tìm giá trị 32bit tại specified offset và đưa nó vào extra window memory của window. Code: LONG GetWindowLong( HWND hWnd, // handle of window int nIndex // offset of value to retrieve ); Returns Nếu function hoàn thành , giá trị trả về là giá trị 32bit Nếu function không hoàn thành , giá trị trả về là 0. Để biết thêm thông tin về lỗi, chúng ta dùng hàm GetLastError. GetWindowText / GetWindowTextA Hàm GetWindowText có nhiệm vụ copy text của title bar(nếu nó chỉ có 1) của specified window vào buffer. Nếu specified window là 1 control thì text của control sẽ được copy. Code: int GetWindowText( HWND hWnd, // handle of window or control with text LPTSTR lpString, // address of buffer for text