INTERNET_PROXY_INFO ରେ ଏକ DWORD ଆକ୍ସେସ୍ ପ୍ରକାର ଏବଂ ଦୁଇଟି ଷ୍ଟ୍ରିଙ୍ଗ ପଏଣ୍ଟର ଥାଏ। ନେଟିଭ୍ ପ୍ରଶ୍ନକୁ ଏହାର ପ୍ରକ୍ସି ଡାଟା ପାଇଁ ଯଥେଷ୍ଟ ବଫର ସ୍ଥାନ ମଧ୍ୟ ଦରକାର; ଛୋଟ ପରିଚାଳିତ ଗଠନର Marshal.SizeOf ସମ୍ପୂର୍ଣ୍ଣ ପରିବର୍ତ୍ତନଶୀଳ-ଦୈର୍ଘ୍ୟ ଫଳାଫଳ ବଫର ନୁହେଁ।

ଏକ ଡେସ୍କଟପ୍ ସୁସଙ୍ଗତତା ସହାୟକ ANSI ପ୍ରବେଶ ବିନ୍ଦୁ ବ୍ୟବହାର କରି ସେହି ପ୍ରଶ୍ନ ବଫର ଛାଡ଼ିବା ପୂର୍ବରୁ ଷ୍ଟ୍ରିଙ୍ଗଗୁଡ଼ିକୁ କପି କରିପାରେ:

static class WinInetProxy
{
    [System.Runtime.InteropServices.StructLayout(
        System.Runtime.InteropServices.LayoutKind.Sequential)]
    struct ProxyInfo
    {
        public uint AccessType;
        public IntPtr Proxy;
        public IntPtr Bypass;
    }

    [System.Runtime.InteropServices.DllImport(
        "wininet.dll", EntryPoint = "InternetQueryOptionA",
        SetLastError = true)]
    [return: System.Runtime.InteropServices.MarshalAs(
        System.Runtime.InteropServices.UnmanagedType.Bool)]
    static extern bool Query(
        IntPtr handle, uint option, IntPtr buffer, ref uint size);

    public static (uint Type, string Proxy, string Bypass) Read()
    {
        uint size = 0;
        Query(IntPtr.Zero, 38, IntPtr.Zero, ref size);
        int error = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
        if (error != 122 || size == 0)
            throw new System.ComponentModel.Win32Exception(error);

        IntPtr buffer = System.Runtime.InteropServices.Marshal
            .AllocHGlobal(checked((int)size));
        try
        {
            if (!Query(IntPtr.Zero, 38, buffer, ref size))
                throw new System.ComponentModel.Win32Exception(
                    System.Runtime.InteropServices.Marshal.GetLastWin32Error());
            var value = System.Runtime.InteropServices.Marshal
                .PtrToStructure<ProxyInfo>(buffer);
            return (value.AccessType,
                System.Runtime.InteropServices.Marshal.PtrToStringAnsi(value.Proxy) ?? "",
                System.Runtime.InteropServices.Marshal.PtrToStringAnsi(value.Bypass) ?? "");
        }
        finally
        {
            System.Runtime.InteropServices.Marshal.FreeHGlobal(buffer);
        }
    }
}

38 ହେଉଛି INTERNET_OPTION_PROXY; 122 ହେଉଛି ERROR_INSUFFICIENT_BUFFER। ପ୍ରଥମ କଲ୍ ଆବଶ୍ୟକ ବାଇଟ୍ ସଂଖ୍ୟା ପାଏ, ଏବଂ ଦ୍ୱିତୀୟଟି ସେହି ଆବଣ୍ଟନ ପୂରଣ କରେ। ଯଦି କଲ୍ ମଧ୍ୟରେ ଫଳାଫଳ ବଢ଼େ, ଅତି ଛୋଟ ବଫର ପଢ଼ିବା ପରିବର୍ତ୍ତେ ଦ୍ୱିତୀୟ ବିଫଳତା ରିପୋର୍ଟ କରାଯାଏ।

AccessType କୁ uint ଭାବରେ ରଖନ୍ତୁ। 64-ବିଟ୍ ପ୍ରକ୍ରିୟାରେ ଏହା 32-ବିଟ୍ DWORD ରହେ, ଯେତେବେଳେ ପଏଣ୍ଟର ଫିଲ୍ଡଗୁଡ଼ିକ ପ୍ରକ୍ରିୟା ଆର୍କିଟେକ୍ଚର ସହିତ ପ୍ରଶସ୍ତ ହୁଏ। ସାଧାରଣ କ୍ରମିକ ଲେଆଉଟ୍ ସମ୍ବନ୍ଧିତ ସଂରେଖଣ ଦିଏ।

ଏହି ଉଦାହରଣ ବିକଳ୍ପ 38 ର ଫଳାଫଳ ବଫର ବିଷୟରେ। ଏହାର ମାଲିକାନା ଢାଞ୍ଚାକୁ INTERNET_OPTION_PER_CONNECTION_OPTION ଉପରେ ଅନ୍ଧଭାବରେ ଲାଗୁ କରନ୍ତୁ ନାହିଁ, ଯାହାର ଫେରାଇ ଦିଆଯାଇଥିବା ଷ୍ଟ୍ରିଙ୍ଗ ବିକଳ୍ପଗୁଡ଼ିକୁ ସେମାନଙ୍କ ଡକ୍ୟୁମେଣ୍ଟେଡ୍ ପୃଥକ ସଫାଇ ଆବଶ୍ୟକ।

ଫଳାଫଳ ଚୟନିତ ହ୍ୟାଣ୍ଡେଲ୍ ପରିସରରେ WinINet ବିନ୍ୟାସ ବର୍ଣ୍ଣନା କରେ। ଏହା କୌଣସି ଇଚ୍ଛାଧୀନ URL ପାଇଁ PAC ନିଷ୍ପତ୍ତି ନୁହେଁ କିମ୍ବା ପ୍ରତ୍ୟେକ ବ୍ରାଉଜରର ପ୍ରଭାବୀ ମାର୍ଗର ରିପୋର୍ଟ ନୁହେଁ। ଯେତେବେଳେ ଫେରାଇ ଦିଆଯାଇଥିବା ପ୍ରକ୍ସି ଷ୍ଟ୍ରିଙ୍ଗ ପ୍ରୋଟୋକଲ୍-ନିର୍ଦ୍ଦିଷ୍ଟ ମ୍ୟାପ୍ ହୁଏ, ଏହାକୁ ଏକ ଏଣ୍ଡପଏଣ୍ଟ ଭାବରେ ଗ୍ରହଣ କରିବା ପରିବର୍ତ୍ତେ ସେହି ଗଠନ ସଂରକ୍ଷିତ ରଖନ୍ତୁ। WinINet ଡେସ୍କଟପ୍ API; ସେବା ପ୍ରୟୋଗଗୁଡ଼ିକୁ ସେମାନଙ୍କ ସମର୍ଥିତ WinHTTP ବ୍ୟବସ୍ଥା ଦରକାର।

ସମ୍ପର୍କିତ ପ୍ରବନ୍ଧ