SetupDiSetDeviceProperty là hàm định nghĩa thuộc tính thể hiện thiết bị (device instance property). Thể hiện thiết bị là chuỗi nhận diện thiết bị duy nhất giúp nhận diện thiết bị trong hệ thống. Hàm SetupDiSetDeviceProperty quan trọng vì nó thiết lập tên hiển thị và các tham số khác cho thiết bị máy tính.
SetupDiSetDeviceProperty là một phần của mô hình thuộc tính thiết bị thống nhất được hỗ trợ bởi các hệ điều hành Windows. Mô hình này định nghĩa cách thiết bị được biểu diễn, mô tả chức năng và thiết lập cấu hình trong Windows. Quy trình này áp dụng cho tất cả phần cứng gắn vào máy tính, bao gồm âm thanh, màn hình, mạng và các thiết bị khác.
Cú pháp cho quy trình SetupDiSetDeviceProperty:
WINSETUPAPI BOOL SetupDiSetDeviceInterfacePropertyW(
HDEVINFO DeviceInfoSet,
PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
const DEVPROPKEY *PropertyKey,
DEVPROPTYPE PropertyType,
const PBYTE PropertyBuffer,
DWORD PropertyBufferSize,
DWORD Flags
SetupDiSetDeviceProperty thành công nếu trả về TRUE. Khi xảy ra lỗi trong quá trình, nó trả về FALSE với mã trả về cụ thể.
Một trong các mã trả về mà người dùng Windows gặp phải là lỗi ERROR_ACCESS_DENIED trên Windows 10/11. Khi lỗi này xảy ra, quy trình SetupDiSetDeviceProperty thất bại và không thể tiếp tục. Nguyên nhân gốc rễ phải được giải quyết trước khi thử lại.
Nguyên nhân gây lỗi ERROR_ACCESS_DENIED
Mã trả về ERROR_ACCESS_DENIED xảy ra vì "người gọi không có đặc quyền Administrator (quản trị viên)". Nếu bạn thắc mắc tại sao SetupDiSetDeviceProperty trả về ERROR_ACCESS_DENIED, nghĩa là bạn không có quyền ghi đầy đủ vào thiết bị bạn đang cố sửa đổi. Hoặc bạn dùng tài khoản non-admin, hoặc dùng tài khoản admin nhưng có đặc quyền hạn chế.
Để khắc phục lỗi này, bạn phải kiểm tra đặc quyền tài khoản và xem thiết bị bạn muốn chỉnh sửa có yêu cầu quyền cụ thể không.
Nguyên nhân khác của ERROR_ACCESS_DENIED là vấn đề tương thích. Nếu chương trình bạn muốn sửa đổi được thiết kế cho phiên bản Windows cũ hơn, có thể không tương thích với Windows 10/11, do đó báo lỗi. Lỗi này cũng xuất hiện nếu chương trình bị ảnh hưởng lỗi thời hoặc hỏng.
Cách khắc phục ERROR_ACCESS_DENIED
Lỗi ERROR_ACCESS_DENIED trên Windows 10/11 có vẻ phức tạp, nhưng các cách khắc phục thực tế đơn giản. Trước khi thử các phương pháp dưới, hãy dọn dẹp tệp rác bằng Outbyte PC Repair và quét virus/mã độc cho máy tính.
Các bước này giúp dọn dẹp máy tính và tối ưu hệ thống cho quy trình khắc phục. Sau khi xong, khởi động lại máy và thực hiện lần lượt các mục dưới.
Cách khắc phục #1: Sửa tệp hệ thống bị hỏng.
Một trong những lý do SetupDiSetDeviceProperty trả về ERROR_ACCESS_DENIED là một số tệp hệ thống liên quan đến chương trình bạn muốn sửa đổi đã bị hỏng. Để kiểm tra tính toàn vẹn tệp hệ thống, dùng công cụ System File Checker (SFC) tích hợp sẵn trong Windows.
Để chạy quét bằng SFC, làm theo các bước:
- Nhấp Command + X để mở Power menu, chọn Command Prompt (Admin) (Dấu nhắc lệnh quản trị).
- Nhập sfc /scannow trong cửa sổ Command Prompt, nhấn Enter.
- Đợi quét hoàn tất. SFC sẽ tự động thử thay thế tệp hệ thống hỏng bằng bản sao tốt từ tệp ảnh khôi phục Windows.
Khởi động lại máy để áp dụng thay đổi và kiểm tra xem lỗi ERROR_ACCESS_DENIED còn tồn tại không.
Cách khắc phục #2: Chạy ở Chế độ tương thích (Compatibility Mode).
Chạy chương trình thiết kế cho Windows cũ (Windows 7, 8, 8.1) có thể gây vấn đề tương thích. Tuy nhiên, không có nghĩa là các chương trình cũ đã lỗi thời. Bạn có thể chạy chúng ở chế độ tương thích để hoạt động đúng và mượt mà.
Để chạy chương trình ở chế độ tương thích:
- Nhấp chuột phải vào lối tắt chương trình trên Desktop, chọn Properties (Thuộc tính).
- Nhấp tab Compatibility (Tương thích).
- Dưới Compatibility Mode, chọn phiên bản Windows muốn dùng, nhấp OK.
- Tích chọn Run this program as an administrator (Chạy chương trình này với quyền quản trị).
Sau khi đặt chương trình chạy ở chế độ tương thích với phiên bản Windows bạn dùng, thử lại hàm SetupDiSetDeviceProperty xem còn trả về ERROR_ACCESS_DENIED không. Nếu vẫn có, chuyển sang bước tiếp theo.
Cách khắc phục #3: Cập nhật chương trình.
Đôi khi lỗi xảy ra chỉ vì bạn quên cập nhật chương trình. Kiểm tra Windows Update dưới Settings > System & Security xem có bản cập nhật phần mềm/hệ thống đang chờ không. Cài đặt tất cả bản cập nhật có sẵn.
Nếu không thấy, kiểm tra trang web nhà phát triển phần mềm — có thể có bản vá hoặc cập nhật mới cần tải thủ công. Tải và cài đặt lên máy để cập nhật chương trình. Sau khi cập nhật, khởi động lại hệ thống và xem lỗi ERROR_ACCESS_DENIED đã khắc phục chưa.
Cách khắc phục #4: Hoàn tác các thay đổi hệ thống gần đây.
Nếu bạn cài đặt hoặc xóa gì đó trước khi lỗi ERROR_ACCESS_DENIED xuất hiện, hành động đó có thể ảnh hưởng hệ thống và gây lỗi. Hãy nhớ lại điều bạn làm và hoàn tác nếu có thể.
Nếu bạn vừa cài bản cập nhật, có thể khôi phục hệ thống về thời điểm mọi thứ hoạt động tốt bằng cách:
- Nhấp Start, vào Settings (Cài đặt).
- Nhấp Update & Security (Cập nhật & Bảo mật), sau đó Windows Update > Update History (Lịch sử cập nhật).
- Nhấp liên kết View installed update history (Xem lịch sử cập nhật đã cài).
- Sẽ có danh sách tất cả bản cập nhật gần đây. Nhấp vào bản mới nhất và nhấn nút Uninstall Update (Gỡ cập nhật).
- Cần khởi động lại máy để thay đổi có hiệu lực, sau đó kiểm tra xem lỗi ERROR_ACCESS_DENIED còn xuất hiện không.
Cách khắc phục #5: Gỡ cài đặt, sau đó cài lại chương trình bị ảnh hưởng.
Nếu vẫn gặp lỗi ERROR_ACCESS_DENIED sau các phương pháp trên, lựa chọn cuối cùng là gỡ cài đặt chương trình.
Để gỡ chương trình trên Windows 10/11:
- Vào Start > Settings > System, nhấp Apps & features (Ứng dụng & tính năng) từ menu trái.
- Chọn chương trình muốn gỡ.
- Nhấp nút Uninstall (Gỡ cài đặt).
- Khởi động lại máy.
Để cài lại, tải bộ cài đặt từ trang web nhà phát triển hoặc Microsoft Store. Nhấp vào tệp đã tải và cài theo hướng dẫn.
Tóm tắt
SetupDiSetDeviceProperty là hàm quan trọng vì nó định nghĩa cách chương trình chạy. Nếu bạn gặp lỗi ERROR_ACCESS_DENIED trên Windows 10/11, chỉ cần làm theo hướng dẫn khắc phục sự cố ở trên để giải quyết.