Exemple #1
0
        /// <summary>
        /// Parse a command line into arguments.
        /// </summary>
        /// <param name="command_line">The parsed command line.</param>
        /// <returns>The list of arguments.</returns>
        public static string[] ParseCommandLine(string command_line)
        {
            if (string.IsNullOrWhiteSpace(command_line))
            {
                return(new string[0]);
            }

            using (var argv = Win32NativeMethods.CommandLineToArgvW(command_line, out int argc)) {
                if (argv.IsInvalid)
                {
                    throw new NtException(NtObjectUtils.MapDosErrorToStatus());
                }

                string[] ret = new string[argc];
                for (int i = 0; i < argc; ++i)
                {
                    ret[i] = Marshal.PtrToStringUni(Marshal.ReadIntPtr(argv.DangerousGetHandle() + IntPtr.Size * i));
                }
                return(ret);
            }
        }