IRP_MJ_DIRECTORY_CONTROL#12870
IRP_MJ_DIRECTORY_CONTROL#12870ibeckermayer merged 146 commits intowindows-desktop-directory-sharingfrom
IRP_MJ_DIRECTORY_CONTROL#12870Conversation
…and cliprdr::Client's have the vchan::Client as a field.
…o trigger it by right-clicking, however it isn't working. One reason is that the vchannel PDU header isn't being added (see rdpdr::encode_message for how that's added to other messages). Noticing that made me notice that there is another cliprdr function for breaking outgoing messages into chunks that should be refactored into vchan to do that work + add the necessary vchan headers. This is a checkpoint commit while I go attend to that.
…lient parses the DeviceCreateRequest that's immediately sent back
…ugh in most cases, no need to neurotically add every bit of the documentation text to the code itself
… to a plain NTSTATUS::STATUS_UNSUCCESSFUL
| /// each res.fso_list[i].path MUST be a non-null pointer to a C-style null terminated string. | ||
| /// | ||
| /// This function MUST NOT hang on to any of the pointers passed in to it after it returns. | ||
| /// All passed data that needs to persist after this function MUST be copied into Rust-owned memory. |
There was a problem hiding this comment.
Why do we have an advisory that on relates to the inner function itself on the function docstring?
There was a problem hiding this comment.
I think I see your point. The general idea was to add this advisory on all these functions at the FFI, in order to be very explicit about what's expected of them in terms of memory safety. Are you suggesting that this would more appropriately located at SharedDirectoryListResponse::from?
There was a problem hiding this comment.
Yep. My thought process is that notes on the FFI functions are advisories to the caller mostly. For impl notes about something I usually lean on placing it as a non docstring inside the body since the caller doesn't care and thus the docs shouldn't either.
…sefully pedantic copies to Rust owned memory in relevant FFI functions
| // fsoList is memory handled by Go, and will be freed | ||
| // by the garbage collector automatically sometime after | ||
| // this code block ends. |
There was a problem hiding this comment.
I'm curious the reasoning behind this comment. Any time you make a slice in Go the memory is handled by Go. Was there some reason we felt the need to clarify that here?
There was a problem hiding this comment.
This was the first time I'd needed to pass something non-trivial across the FFI; this is basically me baby-talking myself through the memory management logic. It can be removed from the production code.
| }) | ||
| } | ||
|
|
||
| // TODO(isaiah): make this logic more sane |
There was a problem hiding this comment.
I'm fine with leaving a TODO, but make it something more actionable. We're not likely to remember what this even means.
There was a problem hiding this comment.
I address it a couple of PR's from this one: https://github.com/gravitational/teleport/pull/12912/files#diff-983433889acb8e2c478d0a04b26bb477bd81271f29515f1ee6c56fa881e2880aL2560
Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>
* `IRP_MJ_CREATE` (#12665) * `IRP_MJ_QUERY_INFORMATION` (#12717) * `IRP_MJ_CLOSE` (#12729) * Refactor rdpdr client (#12750) * Adding logic for `FILE_SUPERSEDE` (#12829) * Improve `process_irp_create` (#12830) * adds return statements that got lost in a merge * `IRP_MJ_DIRECTORY_CONTROL` (#12870) * `FileFullDirectoryInformation` (#12908) * Improve `ClientDriveQueryDirectoryResponse.encode()` (#12912) * `IRP_MJ_QUERY_VOLUME_INFORMATION` (#13071) * Fix Shared Directory Request handling when feature is disabled (#13439) * IRP_MJ_READ, IRP_MJ_WRITE, and IRP_MJ_SET_INFORMATION (#13995) * Adds constants for sizing calculations (#14051) Co-authored-by: Łukasz Kozłowski <lukasz.kozlowski@goteleport.com> Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>
* `IRP_MJ_CREATE` (#12665) * `IRP_MJ_QUERY_INFORMATION` (#12717) * `IRP_MJ_CLOSE` (#12729) * Refactor rdpdr client (#12750) * Adding logic for `FILE_SUPERSEDE` (#12829) * Improve `process_irp_create` (#12830) * adds return statements that got lost in a merge * `IRP_MJ_DIRECTORY_CONTROL` (#12870) * `FileFullDirectoryInformation` (#12908) * Improve `ClientDriveQueryDirectoryResponse.encode()` (#12912) * `IRP_MJ_QUERY_VOLUME_INFORMATION` (#13071) * Fix Shared Directory Request handling when feature is disabled (#13439) * IRP_MJ_READ, IRP_MJ_WRITE, and IRP_MJ_SET_INFORMATION (#13995) * Adds constants for sizing calculations (#14051) Co-authored-by: Łukasz Kozłowski <lukasz.kozlowski@goteleport.com> Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>
…ring) (#15770) * Windows Desktop Directory Sharing (#13630) * `IRP_MJ_CREATE` (#12665) * `IRP_MJ_QUERY_INFORMATION` (#12717) * `IRP_MJ_CLOSE` (#12729) * Refactor rdpdr client (#12750) * Adding logic for `FILE_SUPERSEDE` (#12829) * Improve `process_irp_create` (#12830) * adds return statements that got lost in a merge * `IRP_MJ_DIRECTORY_CONTROL` (#12870) * `FileFullDirectoryInformation` (#12908) * Improve `ClientDriveQueryDirectoryResponse.encode()` (#12912) * `IRP_MJ_QUERY_VOLUME_INFORMATION` (#13071) * Fix Shared Directory Request handling when feature is disabled (#13439) * IRP_MJ_READ, IRP_MJ_WRITE, and IRP_MJ_SET_INFORMATION (#13995) * Adds constants for sizing calculations (#14051) Co-authored-by: Łukasz Kozłowski <lukasz.kozlowski@goteleport.com> Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com> * `UnixPath` and `WindowsPath` (#14267) * `SharedDirectoryMoveRequest` and `SharedDirectoryMoveResponse` (#14959) * `SharedDirectoryCreateResponse` update (#15289) * Fix `process_irp_set_information` (#15364) * Sanitize Rust Debug Logs (#15743) * updates rdp-rs ref to include licensing changes * Updates rdp-rs ref and fixes Cargo Co-authored-by: Łukasz Kozłowski <lukasz.kozlowski@goteleport.com> Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>
Adds support for
IRP_MJ_DIRECTORY_CONTROL, adding support forSharedDirectoryListRequestandSharedDirectoryListResponsein the process.