code: func (c *client) Summary(_ context.Context, containerID string) ([]libcontainerdtypes.Summary, error) {
  	ctr, _, err := c.getProcess(containerID, libcontainerdtypes.InitProcessName)
  	if err != nil {
  		return nil, err
  	}
  
  	p, err := ctr.hcsContainer.ProcessList()
  	if err != nil {
  		return nil, err
  	}
  
  	pl := make([]libcontainerdtypes.Summary, len(p))
  	for i := range p {
  		pl[i] = libcontainerdtypes.Summary{
  			ImageName:                    p[i].ImageName,
  			CreatedAt:                    p[i].CreateTimestamp,
  			KernelTime_100Ns:             p[i].KernelTime100ns,
  			MemoryCommitBytes:            p[i].MemoryCommitBytes,
  			MemoryWorkingSetPrivateBytes: p[i].MemoryWorkingSetPrivateBytes,
  			MemoryWorkingSetSharedBytes:  p[i].MemoryWorkingSetSharedBytes,
  			ProcessID:                    p[i].ProcessId,
  			UserTime_100Ns:               p[i].UserTime100ns,
  			ExecID:                       "",
  		}
  	}
  	return pl, nil
  }
docs: // Summary returns a summary of the processes running in a container.
  // This is present in Windows to support docker top. In linux, the
  // engine shells out to ps to get process information. On Windows, as
  // the containers could be Hyper-V containers, they would not be
  // visible on the container host. However, libcontainerd does have
  // that information.