Như thế này:
SECURITY_DESCRIPTOR SD;
InitializeSecurityDescriptor(&SD, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&SD, TRUE, NULL, FALSE);
tôi bỏ qua việc kiểm tra lỗi vì lợi ích của ngắn gọn. Bạn sẽ không làm điều đó.
Sau đó, khi bạn gọi CreateNamedPipe
bạn có thể thiết lập các thuộc tính an ninh ghi lại như thế này:
SA.nLength = sizeof(SA);
SA.lpSecurityDescriptor = &SD;
SA.bInheritHandle = TRUE;
Các tài liệu cho SetSecurityDescriptorDacl
trạng thái:
Khi tham số pDacl không trỏ đến một DACL và cờ bDaclPresent là TRUE, một DACL NULL được chỉ định. Tất cả truy cập đều được cho phép. Bạn không nên sử dụng một NULL DACL với một đối tượng vì bất kỳ người dùng nào cũng có thể thay đổi DACL và chủ sở hữu của bộ mô tả bảo mật. Điều này sẽ ảnh hưởng đến việc sử dụng đối tượng.
Vì vậy, ở trên là cách thực hiện, nhưng tài liệu nhấn mạnh rằng bạn không nên làm như vậy.
Nguồn
2013-01-24 13:34:00
Hm, phần về việc thay đổi quyền sở hữu là một bất ngờ. Nhưng trong trường hợp của tôi nó không phải là một vấn đề, tôi chỉ cần để có thể kết nối từ exe của tôi bất kể người dùng chạy nó, và kết nối với đường ống sẽ không cho phép họ hack dịch vụ cửa sổ của tôi hoặc bất cứ điều gì. Nhưng nó vẫn thú vị - có thể cấp quyền truy cập cho mọi người để kết nối, mà không cho phép họ thay đổi quyền sở hữu? – sashoalm
Có, sau đó bạn cần phải sử dụng một DACL thực. Mã trong nhận xét của tôi tại câu hỏi trước của bạn giải thích cách tôi làm điều đó. –