Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 25 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
25
Dung lượng
592,87 KB
Nội dung
126 3.5 Tương tác hệ thống – Điều khiển các dịch vụ có trên hệ thống: Trong quá trình thực hiện phần mềm, có một yêu cầu quản trị hệ thống là người quản trị muốn biết tại thời điểm hiện tại, máy khách đang hoạt động những dịch vụ (service) gì. Người quản trị có thể xem danh sách các dịch vụ đó, đồng thời có thể thay đổi bằng cách thêm (mở một dịch vụ mới), bớt (tắt một dịch vụ đang chạy). Yêu cầu này đòi hỏi cần phải tìm hiểu cơ chế quản lý dịch vụ trong hệ điều hành Windows. 3.5.1 Dịch vụ 3.5.1.1 Khái niệm: Ứng dụng có khả năng hoạt động trong một khỏang thời gian dài trong một session của hệ điều hành Windows được gọi là dịch vụ. Các dịch vụ có thể tự động chạy lên mỗi khi máy khởi động, có thể dừng và khởi động lại, và không đưa ra giao diện với người dùng. Dịch vụ thường được sử dụng trên server hoặc bất cứ máy nào cần các tính năng hoạt động lâu dài nhưng không cần can thiệp bởi người dùng. 3.5.1.2 Loại dịch vụ: Ta không đi quá sâu vào các dịch vụ cấp thấp. Ta chỉ quan tâm các dịch vụ dạng ứng dụng chạy là 2 loại Win32OwnProcess và Win32ShareProcess. 3.5.1.3 Vòng đời của dịch vụ: Một dịch vụ trải qua nhiều trạng thái trong vòng đời hoạt động của nó. Trước hết, dịch vụ được cài đặt trong hệ thống mà nó sẽ chạy. Quá trình này thực thi bộ cài đặt của dịch vụ và nạp dịch vụ vào trong Service Control Manager (Bộ Quản lý Điều khiển Dịch vụ). Service Control Manager là một công cụ do hệ điều hành Windows cung cấp để quản trị các dịch vụ. 127 Sau khi dịch vụ được nạp, nó phải được khởi động (start). Khởi động dịch vụ cho phép nó hoạt động. Một dịch vụ đang hoạt động (running) có thể tồn tại ở trạng thái này cho đến khi nó được ngưng lại (stop) hoặc dừng hẳn (pause) hay máy shutdown. Dịch vụ có thể tồn tại dưới 3 trạng thái căn bản : Đang hoạt động (Running), Ngưng (Paused), hay Dừng (Stopped). Dịch v ụ còn báo về các trạng thái chuyển (pending) của nó: Tiếp tục Chuyển (ContinuePending), Chuyển Ngưng (PausePending), Chuyển Khởi động (StartPending), hay Chuyển Dừng (StopPending). Các trạng thái chuyển cho biết lệnh nào mới vừa được kích hoạt, nhưng chưa thực thi xong. Ngoài ra, dịch vụ cần thêm thông tin về trạng thái khởi động của nó. Một số dịch vụ rất cần thiết cho hệ thống (như dịch vụ DHCP), còn một số thì không. Người sử dụng máy có thể cần kích hoạt tự động (Automatic), kích hoạt bằng tay (Manual), hay vô hiệu hóa (Disabled) dịch vụ. Vì vậy, dịch vụ có 3 trạng thái khởi động (trạng thái dịch vụ khi máy vừa khởi động xong) là Tự động (Automatic), Bằng tay (Manual), Vô hiệu (Disabled). Việc điều khiển các dịch vụ đang hoạt động chính là xem danh sách các dịch vụ, thay đổi 3 trạng thái hoạt động là Đang hoạt động (Running), Ngư ng (Paused), hay Dừng (Stopped), và 3 trạng thái khởi động là : Tự động (Automatic), Bằng tay (Manual), Vô hiệu (Disabled). Tuy nhiên, với yêu cầu ở đầu mục, ta chỉ cần điều khiển 2 trạng thái hoạt động là Running và Stopped, và 3 trạng thái khởi động đã nêu là đủ. 3.5.2 Điều khiển các dịch vụ đang hoạt động trên hệ thống: Qua kiến thức khái quát về dịch vụ ở 3.5.1, ta có thể thấy rằng để truy xuất đến các dịch vụ đang chạy trên hệ thống, ta phải thông qua Service Control Manager. Đây là cách chung nhất, và có vẻ là cách khả thi duy nhất trên Visual C++ do VC++ 6.0 không hỗ trợ về truy xuất liên quan đến dịch vụ. 128 3.5.2.1 Các hàm API sử dụng : 3.5.2.1.1 OpenSCManager: Chức năng : thiết lập kết nối đến Service Control Manager trên máy tính và mở cơ sở dữ liệu của Service Control Manager. SC_HANDLE OpenSCManager( LPCTSTR lpMachineName, LPCTSTR lpDatabaseName, DWORD dwDesiredAccess ); Ý nghĩa tham sô: [in] lpMachineName : tên máy tính. Nếu là NULL, sẽ mở chính máy tính cục bộ này. lpDatabaseName : tên của cơ sở dữ liệu Service Control Manager cần được mở. dwDesiredAccess : quyền truy cập mong muốn, xem chi tiết trong MSDN về các quyền truy cập. Giá trị trả về: [out] Nếu thành công, trả về handle của cơ sở dữ liệu Service Control Manager được mở. Nếu thất bại, trả về NULL. . Để bi ết lỗi, gọi GetLastError. 3.5.2.1.2 EnumServicesStatus Chức năng: đếm và lấy thông tin về các dịch vụ trong một cơ sở dữ liệu Service Control Manager được mở. BOOL EnumServicesStatus( SC_HANDLE hSCManager, DWORD dwServiceType, 129 DWORD dwServiceState, LPENUM_SERVICE_STATUS lpServices, DWORD cbBufSize, LPDWORD pcbBytesNeeded, LPDWORD lpServicesReturned, LPDWORD ); Ý nghĩa tham số: [in] hSCManager: handle của cơ sở dữ liệu Service Control Manager được mở, do OpenSCManager trả về khi mở thành công. dwServiceType : loại dịch vụ cần mở dwServiceState : trạng thái loại dịch vụ cần liệt kê [out] lpServices : trỏ đến cấu trúc ENUM_SERVICE_STATUS chứa thông tin dịch vụ: typedef struct _ENUM_SERVICE_STATUS { LPTSTR lpServiceName; // tên đăng ký của dịch vụ LPTSTR lpDisplayName; //tên của dịch vụ SERVICE_STATUS ServiceStatus; } ENUM_SERVICE_STATUS, *LPENUM_SERVICE_STATUS; ServiceStatus : là cấu trúc SERVICE_STATUS typedef struct _SERVICE_STATUS { DWORD dwServiceType; DWORD dwCurrentState; DWORD dwControlsAccepted; DWORD dwWin32ExitCode; DWORD dwServiceSpecificExitCode; 130 DWORD dwCheckPoint; DWORD dwWaitHint; } SERVICE_STATUS, *LPSERVICE_STATUS; dwServiceType : loại dịch vụ. dwCurrentState : Giá trị Ý nghĩa SERVICE_CONTINUE_PENDING Tiếp tục chuyển. SERVICE_PAUSE_PENDING Chuyển ngưng. SERVICE_PAUSED Dịch vụ ngưng. SERVICE_RUNNING Dịch vụ đang chạy. SERVICE_START_PENDING Dịch vụ đang khởi động. SERVICE_STOP_PENDING Dịch vụ đang dừng. SERVICE_STOPPED Dịch vụ dừng hẳn. Bảng 3-6 Tình trạng hiện tại dwControlsAccepted Mã điều khiển Ý nghĩa SERVICE_ACCEPT_NETBINDCHANGE Dịch vụ là m ột thành phần mạng chấp nhận thay đổi trong binding mà không cần dừng hay khởi động lại. SERVICE_ACCEPT_PARAMCHANGE Dịch vụ có thể đọc lại các tham số khởi tạo mà không cần dừng hay khởi động lại. SERVICE_ACCEPT_PAUSE_CONTINUE Dịch vụ có thể ngưng hay tiếp tục. SERVICE_ACCEPT_SHUTDOWN Dịch vụ được thông báo khi hệ 131 thống shutdown. SERVICE_ACCEPT_STOP Dịch vụ có thể dừng. Bảng 3-7 Loại điều khiển chấp nhận dwWin32ExitCode : mã lỗi khi có một lỗi xảy ra khi đang khởi động hay đang dừng. dwServiceSpecificExitCode : lỗi thực thi do dịch vụ tự định nghĩa. dwCheckPoint : giá trị tăng dần khi dịch vụ trải qua lần lược các quá trình khởi động, dừng, ngưng, hay tiếp tục. dwWaitHint : thời gian dự đoán cho một thao tác khởi động, dừng, ngưng, hay tiếp tục, tính theo mili giây. cbBufSize : vùng đệm chứa thông tin dịch vụ từ lpServices. [out] pcbBytesNeeded : số byte cần thêm để lấy các mục dịch vụ còn sót (không chứa đủ trong cbBufSize). lpServicesReturned : số lượng các mục dịch vụ lấy được. [in, out] lpResumeHandle : handle bắt đầu của dữ liệu chứa các mục dịch vụ còn sót l ại. Giá trị trả về: [out] Nếu thành công, trả về khác 0. Nếu thất bại, trả về 0. Để biết lỗi, gọi GetLastError. 3.5.2.1.3 OpenService Chức năng: mở một dịch vụ có sẵn. SC_HANDLE OpenService( SC_HANDLE hSCManager, LPCTSTR lpServiceName, DWORD dwDesiredAccess 132 ); Ý nghĩa tham số [in] hSCManager : handle của một cơ sở dữ liệu Service Control Manager được mở. Hàm OpenSCManager trả về handle này. lpServiceName : tên của service được mở, tên này không dài quá 256 ký tự. Cơ sở dữ liệu Service Control Manager phân biệc chữ hoa chữ thường, nhưng so sánh tên của các dịch vụ thì không. Các ký tự “/” và “\” đều không dùng cho tên của dịch vụ. dwDesiredAccess : quyền truy cập dịch vụ mong muốn. Giá trị trả v ề [out] Nếu thành công, trả về handle của dịch vụ được mở. Nếu thất bại, trả về NULL. Để biết lỗi, gọi GetLastError. 3.5.2.1.4 StartService Chức năng : kích hoạt một dịch vụ. BOOL StartService( SC_HANDLE hService, DWORD dwNumServiceArgs, LPCTSTR* lpServiceArgVectors ); Ý nghĩa tham số: hService : handle dịch vụ đã mở bằng OpenService hay CreateService, và phải có quyền truy cập SERVICE_START. dwNumServiceArgs : số đối số chuỗi truyền cho dịch vụ. lpServiceArgVectors : mảng các đối số chuỗi. Dịch vụ driver không nhận các đối số này. Nếu không cần đối số cho dịch vụ, biến đặt là NULL. Giá trị trả về: 133 [out] Nếu thành công, trả về khác 0. Nếu thất bại, trả về 0. Để biết lỗi, gọi GetLastError. 3.5.2.1.5 ControlService Chức năng : gởi mã điều khiển đến dịch vụ. BOOL ControlService( SC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus ); Ý nghĩa tham số: hService : handle dịch vụ đã mở bằng OpenService hay CreateService, và phải có quyền truy cập SERVICE_START. dwControl : mã điều khiển. lpServiceStatus: trỏ đến cấu trúc SERVICE_STATUS nhận thông tin tình trạng mới nhất của dịch vụ, xem thêm 3.5.2.12 EnumServicesStatus để biết thêm về cấu trúc. Giá trị trả về: [out] Nếu thành công, trả về khác 0. Nếu thất bại, trả về 0. Để biết lỗi, gọi GetLastError. 3.5.2.1.6 ChangeServiceConfig: Chức năng : thay đổi các tham số cấu hình của dịch vụ. BOOL ChangeServiceConfig( SC_HANDLE hService, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, 134 LPCTSTR lpBinaryPathName, LPCTSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCTSTR lpDependencies, LPCTSTR lpServiceStartName, LPCTSTR lpPassword, LPCTSTR lpDisplayName ); Ý nghĩa tham số [in] hService : handle dịch vụ đã mở bằng OpenService hay CreateService dwServiceType : loại dịch vụ, xem 3.5.2.1.2 EnumServicesStatus để biết thêm. dwStartType : loại trạng thái khởi động. dwErrorControl : lỗi điều khiển, để SERVICE_NO_CHANGE nếu không muốn thay đổi điều khiển lỗi đang có. lpBinaryPathName : tên tập tin nhị phân thực thi của dịch vụ. lpLoadOrderGroup : tên nhóm thứ tự nạp mà dị ch vụ là thành viên. lpdwTagId : giá trị thẻ ghi duy nhất trong nhóm nạp. lpDependencies : dịch vụ hay nhóm các dịch vụ trong nhóm nạp cần tải trước khi dịch vụ có thể khởi động. lpServiceStartName : tên tài khỏan mà dịch vụ chạy. lpPassword : mật khẩu. lpDisplayName : tên giao tiếp của dịch vụ với các ứng dụng. Giá trị trả về: [out] Nếu thành công, trả về khác 0. Nếu thất bại, trả về 0. Để biết lỗi, gọi GetLastError. 3.5.2.1.7 CloseServiceHandle 135 Chức năng : đóng handle được mở cho cơ sở dữ liệu Service Control Manager hay đối tượng dịch vụ. BOOL CloseServiceHandle( SC_HANDLE hSCObject ); Ý nghĩa tham số: [in] hSCObject : handle được mở cho cơ sở dữ liệu Service Control Manager hay đối tượng dịch vụ cần đóng. Giá trị trả về: [out] Nếu thành công, trả về khác 0. Nếu thất bại, trả về 0. Để biết lỗi, gọi GetLastError. 3.5.2.2 Cài đặt : Dựa vào các hàm API nêu ở 3.5.1, ta sẽ thực hiện các cài đặt 3.5.2.2.1 Xem danh sách các dịch vụ : Các công việc cần làm: o Mở cơ sở dữ liệu SERVICES_ACTIVE_DATABASE của Service Control Manager. o Lấy danh sách các dịch vụ. o Đóng cơ sở dữ liệu lại. Hàm cài đặt BOOL CTaskMgr::GetServiceList(ENUM_SERVICE_STATUS* &pSrvList, DWORD& nCount) Có lưu ý cho hàm GetServiceBufferSizeNeeded. Hàm cài đặt này có tác dụng trả về số byte th ực sự cần để lưu các thông tin về các dịch vụ. [...]... Hình 3-1 5 Đổi trạng thái khởi động 3.5.2.2.3 Khởi động dịch vụ: Thực hiện các công việc sau: o Mở cơ sở dữ liệu Service Control Manager o Mở dịch vụ o Khởi động dịch vụ o Đóng các handle lại Hàm cài đặt StartService int CTaskMgr::StartService(CString sServiceName) 3.5.2.2.4 Dừng dịch vụ: Thực hiện các công việc sau: o Mở cơ sở dữ liệu Service Control Manager o Mở dịch vụ o Dừng dịch vụ o Đóng các handle... big-endian 1 U8 cờ true-color 2 U 16 red-max 2 U 16 green-max 2 U 16 blue-max 1 U8 red-shift 1 U8 green-shift 1 U8 blue-shift độn 3 147 Định dạng điểm ảnh bên server là số bit dùng cho mỗi giá trị điểm ảnh trên đường truyền Giá trị này phải lớn hơn hay bằng độ sâu màu, là số bit dùng thực trong giá trị điểm ảnh Hiện tại số bit điểm ảnh phải là 8, 16 hay 32 – ít hơn 8 bit màu chưa được hỗ trợ Cờ big-endian... U8 độ sâu màu 1 U8 cờ big-endian 1 U8 cờ true-color 2 U 16 red-max 2 U 16 green-max 2 U 16 blue-max 1 U8 red-shift 1 U8 green-shift 1 U8 blue-shift độn 3 4.1 .6. 3.2 FixColourMapEntries Thông điệp này không còn được dùng Trước đây nó là một dạng thông điệp 4.1 .6. 3.3 SetEncodings Thiết lập dạng mã hóa mà dữ liệu điểm ảnh dùng được server gởi Thứ tự của các dạng mã hóa được ghi trong thông điệp là chỉ dẫn của... ClientInitialisation 4.1 .6. 2.2 Chứng thực VNC 148 Chứng thực VNC được dùng và dữ liệu nghi thức gởi không mã hóa Server gởi một giá trị thử 16 byte ngẫu nhiên: Số byte Type [Giá Mô tả trị] 16 U 16 thử Client mã hóa giá trị thử với DES, dùng mật mã được người dùng cung cấp là khóa, và gởi trả hồi đáp 16 byte: Số byte Type [Giá Mô tả trị] 16 U 16 hồi đáp Nghi thức tiếp tục với thông điệp SecurityResult 4.1 .6. 3 Các thông...Hình 3-1 4 Xem danh sách các dịch vụ 3.5.2.2.2 Đổi trạng thái khởi động của dịch vụ : Thực hiện các công việc sau: o Mở cơ sở dữ liệu Service Control Manager o Mở dịch vụ o Thay đổi trạng thái khởi động là SERVICE_AUTO_START hay SERVICE_DEMAND_START hay SERVICE_DISABLED o Đóng các handle lại Hàm cài đặt ChangeWaytoStartup int CTaskMgr::ChangeWaytoStartup(CString dwStartType) 1 36 sServiceName, DWORD... nhất Green-max, green-shift và blue-max, blue-shift tương tự cho màu xanh lá và xanh dương Chẳng hạn, để tìm giá trị đỏ (từ 0 đến red-max) từ một điểm ảnh cho trước, làm như sau: • Tráo đổi giá trị điểm ảnh dựa theo cờ big-endian (e.g nếu cờ big-endian là 0 (sai) và thứ tự byte của máy chủ là big endian, tráo đổi) • Dời bit sang phải theo red-shift • AND với red-max (theo thứ tự byte của máy chủ) Nếu... xử lý ở client càng dễ dàng càng tốt Điều lưu ý là server phải luôn có thể đáp ứng mọi định dạng mà người 141 dùng mong muốn Tuy nhiên client có thể tùy nghi với nhiều dạng và mã hóa khác nhau, nó có thể chọn dạng mà dễ dàng cho server xử lý hơn Định dạng điểm ảnh là việc trình bày các màu riêng biệt của các giá trị điểm ảnh Định dạng điểm ảnh phổ biến nhất là 24-bit và 1 6- bit “màu thực”, mà trong các. .. ảnh âm các khả năng mã mã nguồn mở, hỗ trợ thanh đa nền khác nhau hóa và giải mã âm (H 261 , H 263 …) Công thanh hình ảnh theo nghệ mã nguồn mở Khuyết điểm dòng rất hiệu quả Khả năng ứng dụng Các bản phát hành trên Đòi hỏi tối đa việc các lĩnh vực khác Windows 138 còn nhiều hỗ trợ về hệ điều khá hạn chế, nghi hạn chế và lỗi, chưa hành trong việc thức hầu như chỉ giải quyết triệt để việc truyền gởi (phải... dịch vụ o Dừng dịch vụ o Đóng các handle lại Hàm cài đặt StopService int CTaskMgr::StopService(LPCTSTR sServiceName) 137 Hình 3-1 6 Khởi động / tắt dịch vụ Hoàn tất yêu cầu ban đầu Chương 4 Các công nghệ : Trong ba công nghệ truyền hình ảnh, âm thanh chúng em đã nghiên cứu và trình bày trong chương này đều có những ưu và nhược điểm riêng: RFB H323 Windows Media Encoder (WME) Ưu điểm Giải quyết triệt... 4.1 .6 Các thông điệp nghi thức: Nghi thức RFB có thể họat động trên mọi tầng vận chuyển tin cậy, dựa trên luồng byte hay thông điệp Có hai phần trong nghi thức, một pha bắt tay khởi tạo theo sau một giao tiếp nghi thức thông thường Bắt tay khởi tạo bao gồm các thông điệp về Phiên bản Nghi thức, Bảo mật, Khởi tạo bên Client và Khởi tạo bên Server, sẽ được mô tả sau Chú ý cả server và client đều gởi thông . cần để lưu các thông tin về các dịch vụ. 1 36 Hình 3-1 4 Xem danh sách các dịch vụ 3.5.2.2.2 Đổi trạng thái khởi động của dịch vụ : Thực hiện các công việc sau: o Mở cơ sở dữ liệu Service. sServiceName, DWORD dwStartType) 137 Hình 3-1 5 Đổi trạng thái khởi động 3.5.2.2.3 Khởi động dịch vụ: Thực hiện các công việc sau: o Mở cơ sở dữ liệu Service Control Manager. o Mở dịch. GetLastError. 3.5.2.2 Cài đặt : Dựa vào các hàm API nêu ở 3.5.1, ta sẽ thực hiện các cài đặt 3.5.2.2.1 Xem danh sách các dịch vụ : Các công việc cần làm: o Mở cơ sở dữ liệu SERVICES_ACTIVE_DATABASE