2009-07-16 28 views
5

Tôi đã chơi lớn với DC thu được với CreateDC(L"DISPLAY",NULL,NULL,NULL) và tôi đã tự hỏi tại sao cửa sổ cho phép bạn vẽ trên toàn bộ màn hình một cách dễ dàng, vì tôi nghĩ bạn có thể làm một số công cụ khá độc ác với điều đó như đặt một TIMER tại 1ms và vẽ một hình chữ nhật màu đen trên toàn bộ màn hình mỗi khi bộ đếm thời gian được đánh dấu.Tại sao cửa sổ cho phép bạn vẽ trên toàn bộ màn hình?

Trả lời

31

Thực tế là bạn có thể làm một số công cụ khá độc ác không có nghĩa là cửa sổ không cho phép bạn làm điều đó. Chỉ cần nghĩ về tất cả những điều xấu xa khác mà bạn có thể làm:

  • Chạy trong một vòng lặp vô hạn và ăn hết tất cả thời gian cpu.
  • Viết các bit ngẫu nhiên vào một tệp cho đến khi bạn lấp đầy toàn bộ đĩa cứng.
  • Xóa các tệp ngẫu nhiên khắp nơi.
  • Phân bổ trí nhớ như điên cho đến khi máy tính chậm lại.

Chỉ vì bạn CÓ THỂ làm những điều đó không có nghĩa là cửa sổ sẽ ngăn không cho bạn ghi vào ổ cứng hoặc cấp phát bộ nhớ hoặc xóa tệp.

Mục đích của Windows là cung cấp môi trường trong đó các chương trình có thể chạy. Họ càng làm cho môi trường đó trở nên linh hoạt hơn, các chương trình thú vị hơn (và, không may, đáng sợ) có thể tạo cho các nhà phát triển tạo ra.

Nếu họ bắt đầu đưa vào hạn chế tùy ý vào những gì bạn có thể làm bởi vì bạn có thể lạm dụng nó ... tốt, sau đó nó sẽ không có cửa sổ, nó sẽ là một chiếc iPhone :)

+5

Mục đích của hệ điều hành là quản lý tài nguyên của hệ thống. Màn hình là một trong những tài nguyên đó. Hệ điều hành đặt giới hạn về những gì mà một quy trình có thể thực hiện đối với các tài nguyên của quy trình khác (ví dụ: bạn thường không thể chạm vào không gian địa chỉ của quy trình khác). Hệ điều hành đảm bảo rằng, ngay cả khi bạn có vòng lặp vô hạn, các quy trình khác sẽ nhận được thời gian CPU được lên lịch. Hệ điều hành có thể thực thi hạn ngạch đĩa và đặc quyền truy cập. Giới hạn bộ làm việc ngăn bạn sử dụng hết tất cả RAM vật lý. Ngay cả ở cấp độ giao diện người dùng, Windows cũng hạn chế các ứng dụng lấy cắp tiêu điểm. Vậy tại sao không giới hạn nơi ứng dụng có thể viết nguệch ngoạc trên màn hình? –

+0

@Adrian - bởi vì nó sẽ đặt giới hạn nhân tạo về những gì bạn có thể làm với hệ điều hành. Ví dụ, việc tạo một widget như Jing nổi ở đầu màn hình trên tất cả các cửa sổ sẽ là không thể. –

10

tại sao cửa sổ cho phép bạn ghi vào ổ cứng dễ dàng như vậy?

bạn có thể thực hiện một số nội dung khá độc ác như ghi đè mọi tệp trên ổ cứng.

4

Bởi vì nó phải được rằng dễ dàng. Nó là dễ dàng bởi vì để đặt quy tắc và điều khiển tại chỗ có nghĩa là bạn sẽ cắt giảm những điều bạn có thể làm với ngôn ngữ và khung cửa sổ. Nếu điều này xảy ra thì sẽ có tiếng la hét từ phía bên kia của hàng rào hét lên như thế nào bạn không thể làm điều này và điều đó.

Đó là những khả năng này làm cho ngôn ngữ mạnh mẽ, nhưng với sức mạnh đó đến nguy hiểm. Chỉ vì bạn có thể làm điều gì đó, không có nghĩa là bạn nên làm. Bạn có thể định dạng ổ đĩa cứng của bạn ... không có nghĩa là bạn nên làm điều này khi bạn khởi động ứng dụng đồng hồ.

Nếu bạn không hài lòng với mức độ 'trách nhiệm' sau đó chọn một ngôn ngữ khác nhau hoặc khuôn khổ để viết.

3

Tất cả mọi thứ là một cửa sổ và mỗi cửa sổ có một HANDLE. Vì vậy, nếu bạn có DesktopHandle, thì bạn có thể vẽ bất kỳ thứ gì trên đó. Vấn đề với nó là gì.

Offcourse, ứng dụng đang thực hiện các công cụ độc ác (như bạn đã nói) đã được phép chạy trên máy một mình, do đó, nó có thể thực hiện nhiều công cụ khác hơn như định dạng ổ đĩa cứng của bạn, v.v.

7

Tính bảo mật của máy tính để bàn được cấp cho người dùng đang chạy màn hình nền, bạn không thể vẽ trên màn hình nếu bạn không phải là người dùng đặc quyền.

Lưu ý rằng một thường không CreateDC() trên màn hình nền, nhưng thường là GetDC() cho một cửa sổ cụ thể trong trình xử lý tin nhắn WM_PAINT.

Một chương trình cũng có thể xóa hệ thống tệp hoặc hủy đăng ký (nếu được cho phép phù hợp), máy tính để bàn là tài nguyên do người dùng cấp phép như bất kỳ tài nguyên nào khác. Nếu họ chạy một ứng dụng với thông tin bảo mật của họ, họ có thể làm những gì họ muốn.

Tuy nhiên trong thực tế, người ta sẽ tạo một cửa sổ và tô màu trong đó.

2

Nếu phương pháp bạn đang sử dụng (nhận DC màn hình) bị vô hiệu hóa, nó sẽ không ngăn mọi người thực hiện các thao tác sau.

Bạn có thể tạo cửa sổ, bạn có thể vẽ trong cửa sổ, bạn có thể đặt kích thước cửa sổ để che toàn bộ màn hình, do đó bạn có thể vẽ trên toàn bộ màn hình.

Và bạn có thể lấy một bitmap của toàn bộ màn hình, vì vậy bạn có thể vẽ nội dung màn hình cơ bản trong cửa sổ và sau đó thực hiện điều chỉnh cho nó.

Vì vậy, sẽ rất dễ dàng để mô phỏng hiệu ứng tương tự bằng cách sử dụng kết hợp những thứ mà, một mình, hoàn toàn hợp lệ và cực kỳ hữu ích.

+0

"Bạn có thể lấy một bitmap của toàn bộ màn hình" ... đó cũng là một hoạt động sẽ bị từ chối cho các ứng dụng không đáng tin cậy. –

1

Vì có thể có lúc bạn cần làm những việc này. Tôi chắc chắn tại thời điểm này bạn không thể nghĩ ra bất kỳ nhưng viết trên màn hình có thể hữu ích.

Trên OS X có nhiều ứng dụng viết trực tiếp trên màn hình. Thông tin hữu ích như thời gian CPU hoặc thậm chí là lịch. Thật tuyệt!

Nhưng không phải mọi thứ có thể được thực hiện phải được thực hiện.

-3

Một trong những lý do chính khiến Windows bị ảnh hưởng bởi phần mềm độc hại là thiếu bảo mật xung quanh những thứ như bạn mô tả. Những người khác đã trích dẫn các ví dụ như làm đầy ổ cứng, xóa các tập tin ngẫu nhiên, hoặc ăn CPU ... tất cả những điều này đều là vấn đề an ninh, và tất cả chúng đều bị ngăn cản bởi hai hệ điều hành chính khác (Linux và OSX). Điều này không có nghĩa là bạn không thể làm những việc tương tự trên các hệ điều hành đó, nhưng điều đó có nghĩa là một người dùng bình thường không thể làm điều đó. Họ phải được cấp quyền thích hợp và thường buộc phải sử dụng API rất hạn chế để hạn chế những gì họ có thể làm. Vì vậy, câu trả lời cho câu hỏi của bạn là "bởi vì nó không được thiết kế với bảo mật trong tâm trí". Điều này cho phép các lập trình viên linh hoạt hơn, và các quyền hạn này có thể được sử dụng tốt, nhưng IMHO thường tạo ra sự lười biếng hơn (mọi người sử dụng cách bạo lực thay vì dành thời gian để tìm ra cách "đúng" để làm điều gì đó) và mở cửa cho các sự cố bảo mật (phần mềm độc hại).

+3

Chạy Windows bên trong một tài khoản Người dùng hạn chế thực sự khá an toàn trong những ngày này. Có lẽ ít nhất là tốt như Linux với các lỗi bảo mật DBUS của nó và máy chủ X chạy root-set UID. –

+0

@Zan: một Windows hiện đại, chẳng hạn như Máy chủ 2k8, với tất cả các bản cập nhật được áp dụng và sử dụng đúng cách UAC, _might_ tiếp cận bảo mật được cung cấp bởi hệ thống Linux được định cấu hình đúng. Nhưng đó là gần như không bao giờ thực hiện trong thực tế. – rmeador

+3

Lý do chính của sự phiền toái được gọi là phần mềm độc hại là mọi người ngồi trên các tài khoản quản trị - chính là nó. Ngoài ra, các nền tảng phổ biến hơn, các lập trình viên crappy hơn nhắm mục tiêu của họ "phần mềm" trên nó, do đó sự lười biếng rõ ràng giữa chúng. Bạn có thể loại bỏ gần như toàn bộ '/' (hoặc ít nhất là '/ etc') trong linux bằng một tài khoản root. Đây có phải là mối lo ngại về bảo mật cho bạn không? – macbirdie

Các vấn đề liên quan