Khi bạn khởi động hệ thống Windows, nhiều dịch vụ sẽ chạy ngầm trong nền, đây là nền tảng quan trọng cho sự ổn định của hệ điều hành. Việc khởi động và quản lý các dịch vụ này chủ yếu là trách nhiệm của Quản lý kiểm soát dịch vụ (SCM). SCM là một quy trình hệ thống đặc biệt nằm trong hệ điều hành Windows NT, chịu trách nhiệm khởi động, dừng và tương tác với các quy trình dịch vụ của Windows.
Chức năng chính của SCM bắt đầu với hàm chính SvcCtrlMain(), hàm này khởi động tất cả các dịch vụ được cấu hình để tự động khởi động.
Tệp thực thi SCM services.exe nằm trong %SystemRoot%\System32\ và được tiến trình Wininit khởi động ngay khi hệ thống khởi động. Khi SCM bắt đầu hoạt động, trước tiên nó sẽ khởi tạo cơ sở dữ liệu nội bộ của các dịch vụ đã cài đặt, bao gồm việc đọc các khóa đăng ký cụ thể.
Cụ thể, nó khởi tạo cơ sở dữ liệu nội bộ bằng cách đọc hai khóa sổ đăng ký sau:
SCM xác định thứ tự tải của các dịch vụ dựa trên giá trị Nhóm và sự phụ thuộc của từng dịch vụ. Trong quá trình này, nếu phát hiện sự phụ thuộc vòng tròn, SCM sẽ ghi lại lỗi và bỏ qua dịch vụ phụ thuộc vào nhóm tải muộn.
Bước tiếp theo trong SCM là kiểm tra xem trình điều khiển thiết bị cần khởi động trong quá trình khởi động hệ thống có được tải thành công hay không và lưu các trình điều khiển bị lỗi vào danh sách có tên là ScFailedDrivers.
SCM sau đó gọi hàm ScAutoStartServices(), lặp qua tất cả các dịch vụ được đánh dấu để tự động khởi động và khởi động chúng theo đó. Đối với mỗi dịch vụ, SCM gọi hàm ScStartService() để đảm bảo rằng quy trình của dịch vụ chạy dưới đúng tài khoản. Nếu dịch vụ không chạy dưới tài khoản Hệ thống, SCM sẽ gọi hàm LSASS LogonUserEx() để lấy mật khẩu "bí mật" được lưu trữ an toàn khi dịch vụ được cấu hình ban đầu.
Không chỉ vậy, còn có một loại dịch vụ đặc biệt - dịch vụ khởi động tự động bị trì hoãn. Loại dịch vụ này được giới thiệu trong Windows Vista để giải quyết vấn đề khởi động hệ thống chậm. SCM sẽ không bắt đầu khởi tạo các dịch vụ khởi động tự động bị trì hoãn cho đến khi tất cả các dịch vụ khởi động tự động không bị trì hoãn đã được xử lý.
Mặc dù có sự chậm trễ trong việc bắt đầu các dịch vụ này, nhưng chúng không khác nhiều so với các dịch vụ khác, ngoại trừ thứ tự bắt đầu.
Điều đáng chú ý là SCM cũng xử lý cụ thể các dịch vụ trình điều khiển thiết bị. Giá trị đăng ký Loại của các dịch vụ này là SERVICE_KERNEL_DRIVER hoặc SERVICE_FILE_SYSTEM_DRIVER. Khi SCM gọi ScStartService(), nó sẽ gọi hàm ScLoadDeviceDriver() để tải trình điều khiển tương ứng.
Thông qua lệnh gọi hệ thống NtLoadDriver, SCM đảm bảo trình điều khiển được tải đúng cách. Trong quá trình khởi động ban đầu, SCM thậm chí còn có trách nhiệm thông báo cho các ứng dụng khác, chẳng hạn như Windows Explorer, khi trạng thái kết nối của ổ đĩa mạng thay đổi bằng cách phát thông báo Windows WM_DEVICECHANGE.
Thiết kế này cho phép người dùng quản lý tốt hơn các tài nguyên và dịch vụ hệ thống, đảm bảo hệ điều hành hoạt động trơn tru.
Tuy nhiên, mặc dù SCM đóng vai trò quan trọng trong việc khởi động hệ thống, nhiều người dùng vẫn không thực sự hiểu cách thức hoạt động của nó. Đằng sau mỗi hoạt động của SCM đều có một công nghệ phức tạp và hiệu quả. Trên thực tế, nó cho phép người dùng sử dụng những ứng dụng và dịch vụ có vẻ bình thường đó mà không gặp trở ngại nào.
Trong các phiên bản Windows tương lai, SCM sẽ phát triển như thế nào để đáp ứng nhu cầu ngày càng đa dạng của người dùng?